我正在使用XSL文件重新格式化XML文件(以不同格式输出XML文件)我的问题是一些节点包含html转义序列(ї)中的Unicode包机,当我使用XSL时,这些Unicode被解码并转换为它们的实际值,我需要它们保持为html转义序列(ї)
我尝试了这个,但它没有工作,它解码了我需要html转义序列保留,因为它是为了以后的处理
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" disable-output-escaping="yes" />
</xsl:copy>
</xsl:template>
提前谢谢你,
答案 0 :(得分:2)
除非你理解它意味着什么,否则不要使用disable-output-escaping - 它不是魔法仙尘。您的投诉是,角色不会在您希望转义的位置进行转义,因此禁用转义几乎无济于事。
XSLT处理器不知道哪些字符在输入中被转义,哪些不是 - XML解析器不提供该信息。因此,如果您确实希望输出完全反映输入,那么实现它的唯一方法是在XML解析器看到之前预处理XML。一种方法是安德鲁·韦尔奇的lexev预处理器。
更常见的是,人们希望非ASCII字符转义,无论它们是否在输入中被转义,并且可以通过将输出编码设置为us-ascii来实现 - 前提是元素名称中没有非ASCII字符或评论,这会导致错误。
答案 1 :(得分:0)
disable-output-escaping
应为“否”,仅适用于xsl:value-of
和xsl:text
元素。并非所有XSLT处理器都需要支持它。
XSLT 2.0弃用输出转义并引入了"character maps"的概念。但是,并非所有XSLT处理器都可以使用XSLT 2.0,并且采用率有限。根据您使用的内容,您的XSLT处理器可能不支持XSLT 2.0。我会调查一下。