我正在寻找在处理我的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 "',
$str, '".')"
/>
</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 ("',
codepoints-to-string(.),
'") in "',
$str, '".')"
/>
</xsl:message>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$str"/>
</xsl:function>
这将产生以下消息:
Invalid character (" ") in "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz".