2

给定以下 XML:

<element><![CDATA[<p>Look at this beautiful house: &amp;#8962;</p>]]></element>

这个 XSL-T:

<xsl:template match='/element'>
    <xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>

将其转换为:

<p>Look at this beautiful house: &amp;#8962;</p>

所以 CDATA 被剥离了,但是我如何将&amp;#8962;其转换为正确的表示形式:⌂?

4

2 回答 2

1

我最终修复它:

<xsl:value-of select="replace(current(), '&amp;amp;', '&amp;')" disable-output-escaping="yes"/>

我不得不在这里转义与符号,因为我直接在 XML 中使用它,所以处理器将它转换回replace(current(), '&amp;', '&')我想要的。

我为此使用 XSLT v2,因为它具有替换功能。

不幸的是,不可能从源头上修复损坏的输入,这是我们工作领域的一个常见问题。:)

于 2013-10-18T06:17:50.360 回答
0

对于像我一样碰巧遇到这种情况的任何人,以下是我在我的 ASP.Net MVC 网站中为 XSLT 1.0 样式表解决这个困境的方法。对于我需要的东西工作得很好。希望它可以帮助你。

首先,我编写了这个函数并将其包含在我的样式表中:

<msxsl:script language="C#" implements-prefix="functions">
    <msxsl:assembly name="System.Web"/>
    <msxsl:using namespace="System.Web"/>
    <![CDATA[       
          public string RemoveAmpersandEncoding(string sText)
          {
            return sText.Replace("&amp;", "&");
          }
    ]]>
</msxsl:script>

然后我稍后在样式表中调用了该函数以获得必要的结果:

<xsl:value-of select="functions:RemoveAmpersandEncoding(/ReservationsViewData/Campground/CancellationPolicy)" disable-output-escaping="yes"/>
于 2018-09-07T17:17:49.443 回答