【发布时间】:2013-04-19 11:55:17
【问题描述】:
我有以下 XML:
<item>
<description><![CDATA[Euro sign: €]]></description>
</item>
当我针对这个 XSL 运行它时:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes">
<xsl:output method="xml" name="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="item">
<xsl:result-document href="test.xml" format="xml">
<feed>
<xsl:value-of select="description" />
</feed>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
“test.xml”等于:
<feed>
<description>Euro sign: €</description>
</feed>
这是完美的。但是,当<xsl:result-document> 被删除时,如下所示:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes">
<xsl:output method="xml" name="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="item">
<feed>
<xsl:value-of select="description" />
</feed>
</xsl:template>
</xsl:stylesheet>
输出等于:
<feed>
<description>Euro sign: €</description>
</feed>
这是不正确的,因为欧元符号似乎已被转义。
在使用纯输出时,有什么方法可以保持欧元符号不变?
提前致谢。
【问题讨论】:
-
您如何查看输出?对我来说,您似乎获得了正确的 UTF-8 结果,但您似乎在无法正确解释 UTF-8 的用户代理(控制台窗口?浏览器?)中查看它。
-
我同意 mzjn。我建议简单地将
xsl:output指令更改为omit-xml-declaration="no",这样创建的 XML 文档将以 XML 声明开始,告诉 XML 编辑器或查看器使用哪种编码并且渲染应该可以工作。 -
我也同意。我发现尽可能使用 XML 字符实体很有用——当前工具链中有很多地方的编码可能会损坏。并且总是在 xml-declaration 中声明编码(如果可能,我总是尝试使用 UTF-8)
-
谢谢大家!是的,你是对的。我们在 Eclipse 的控制台窗口中显示数据,该窗口不是为 UTF-8 设置的。一旦我们将控制台的设置更改为以 UTF-8 输出,输出就被修复了。再次感谢。
-
如果您已经解决了您的问题,您可以将解决方案添加为答案并接受它,以便人们知道此问题已得到解答。
标签: xml xslt encoding utf-8 saxon