XSLT 中可以使用哪些编码来仅支持基本的拉丁字母字符?



我正在寻找在处理我的XML时需要在XSLT中使用的正确编码类型。

我的需求是:

输出文本文件不接受任何特殊字符或 UTF8。 仅支持现代英语字母表的字母逻辑是基于拉丁语的字母表,由26个字母组成 - 与基本现代拉丁字母表中的字母相同。

我尝试使用编码="ISO 8859-1",编码="ISO 8859-15"。

如果上面有错误,有人可以告诉我正确的编码吗

谢谢 贾根

就像@EiríkrÚtlendi评论中建议的那样;清理/检查 XSLT 中的输出。

您可以使用单个参数创建一个函数来检查无效字符...

XML 输入

<elem>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</elem>

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:so="StackOverflow Example">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="elem">
<xsl:value-of select="so:out(.)"/>
</xsl:template>
<xsl:function name="so:out">
<xsl:param name="str"/>
<xsl:if test="matches($str,'[^p{L}]')">
<xsl:message terminate="yes">
<xsl:value-of
select="
concat('Invalid character in &quot;',
$str, '&quot;.')"
/>
</xsl:message>
</xsl:if>
<xsl:value-of select="$str"/>
</xsl:function>
</xsl:stylesheet>

文本输出

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

如果将任何其他字符添加到输入中的elem元素,您将收到以下消息(我添加了一个空格以使其失败(:

Invalid character in "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz".

你也可以逐个字符地检查它...

<xsl:function name="so:out">
<xsl:param name="str"/>
<xsl:for-each select="string-to-codepoints($str)">
<xsl:if test="matches(codepoints-to-string(.),'[^p{L}]')">
<xsl:message terminate="yes">
<xsl:value-of
select="
concat('Invalid character (&quot;',
codepoints-to-string(.),
'&quot;) in &quot;',
$str, '&quot;.')"
/>
</xsl:message>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$str"/>
</xsl:function>

这将产生以下消息:

Invalid character (" ") in "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz".

最新更新