我正在搜索处理我的XML时需要在XSLT中使用的正确编码类型。
我的需求是:
输出文本文件不接受任何特殊字符或UTF8 。 使用仅支持现代英语字母表的字母逻辑是由26个字母组成的拉丁字母 - 与基本现代拉丁字母中的相同字母。
我尝试使用 encoding =" ISO 8859-1" , encoding =" ISO 8859-15" 。
如果上面的错误可以告诉我正确的编码
谢谢, 贾根
答案 0 :(得分:2)
就像评论中提到的@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".