【问题标题】:XSLT Encoding IssueXSLT 编码问题
【发布时间】: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>

这是完美的。但是,当&lt;xsl:result-document&gt; 被删除时,如下所示:

<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


【解决方案1】:

我们在 Eclipse 的控制台窗口中显示数据,该窗口不是为 UTF-8 设置的。一旦我们将控制台的设置更改为以 UTF-8 输出,输出就被修复了。

【讨论】:

    【解决方案2】:

    尝试从 xsl:output 元素中删除 name 属性:

    <xsl:output method="xml" version="1.0" encoding="UTF-8"
            indent="yes" omit-xml-declaration="yes" />
    

    通过使其成为未命名的 xsl:output 元素,它应该应用于当前运行。

    【讨论】:

    • 谢谢!我们能够通过更改控制台窗口的输出编码来修复它。现在添加了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多