【问题标题】:XSLT strange behavior with umlaut (mutation)XSLT 带有变音符号(突变)的奇怪行为
【发布时间】:2011-12-28 08:03:57
【问题描述】:

当我尝试使用 XSLT 解析 xml 中的一个节点时,我有一个非常奇怪的行为。

所以我们现在假设 CustomerName 的值是“MÖP”。

在这种情况下,生成的 HTML 'a' 标记将具有指向 'M%C3%B6P' 的 href

<a href="{CustomerName}">
    <xsl:value-of disable-output-escaping="yes" select="CustomerName"/> 
</a>

在这种情况下,生成的 HTML 'div' 标签将有一个 id 'MÖP'

<div style="display:none">
    <xsl:attribute name="id"><xsl:value-of select="CustomerName"/></xsl:attribute>
</div>

好像a标签中的属性href有关系。

我的问题是,为什么会这样? 在这两种情况下我能做什么我得到相同的输出?

问候

【问题讨论】:

    标签: html xml xslt transformation


    【解决方案1】:

    XSLT 处理器通过转义 HTML 链接元素的 href 属性中的 URL 值来帮您一个忙。这是设计使然,请参阅http://www.w3.org/TR/xslt-xquery-serialization/#HTML_ESCAPE-URI-ATTRIBUTES。如果您真的不希望这样并且使用 XSLT 2.0 处理器,那么您可以在样式表中使用 &lt;xsl:ouput method="html" escape-uri-attributes="no"/&gt;

    【讨论】:

    • 但是你能不能告诉我我怎么能用另一种方式来做,所以 id 属性值会被转义一样?我在 .Net 下工作,在这种情况下,我必须实现 Saxon.Net Lib 才能对其进行转换,因为 .net 不适用于 XSLT2.0。当我可以选择时,我不想使用另一个 3. Party Lib。
    • 不,id 值不应该采用这种格式。如果您希望它们相同,则应尝试将它们转换为字符引用(因此 MÖP 在两种情况下都将变为 MÖP)。但我不确定如何使用 XSLT 做到这一点。
    • 如果您使用像 Saxon 9 这样的 XSLT 2.0 处理器,那么您可以分别使用像 saxonica.com/documentation/functions/intro/escape-html-uri.xml 这样的函数 saxonica.com/documentation/functions/intro/encode-for-uri.xml。 XSLT 1.0 处理器不支持这些函数,使用 .NET 的 XslCompiledTransform,您可以使用扩展函数/对象,如 msdn.microsoft.com/en-us/library/6datxzsd.aspx 中所述。如果您需要帮助,请考虑提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多