给出以下XML:
<element><![CDATA[<p>Look at this beautiful house: &#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: &#8962;</p>
所以CDATA被删除了,但我如何将&#8962;
转换为正确的表示:⌂?
答案 0 :(得分:1)
我最终用以下方法修复它:
<xsl:value-of select="replace(current(), '&amp;', '&')" disable-output-escaping="yes"/>
我不得不在这里转义&符号因为我直接在XML中使用它,所以处理器将它转换回replace(current(), '&', '&')
这就是我想要的。
我正在使用XSLT v2,因为它具有替换功能。
不幸的是,在源头修复损坏的输入是不可能的,这是我们工作领域的一个常见问题。 :)
答案 1 :(得分: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("&", "&");
}
]]>
</msxsl:script>
然后我稍后在样式表中调用该函数以获取必要的结果:
<xsl:value-of select="functions:RemoveAmpersandEncoding(/ReservationsViewData/Campground/CancellationPolicy)" disable-output-escaping="yes"/>