我有一个XML源,其中包含我需要使用XSL在网页中显示为HTML的内容。其中一个XML节点包含一个双“HTML编码”值。这是我需要输出HTML的那个。
原来的HTML输入是<p><strong>hello world</strong></p>
但它然后存储为两次HTML编码文本。
<p><strong>hello world</strong></p>
<p><strong>hello world</strong></p>
&lt;p&gt;&lt;strong&gt;hello world&lt;/strong&gt;&lt;/p&gt;
我只从XML源接收第二个HTML编码
<CONTENT>
<RECORD>
<OVERVIEW>&lt;p&gt;&lt;strong&gt;hello world&lt;/strong&gt;&lt;/p&gt;</OVERVIEW>
</RECORD>
</CONTENT>
使用xsl输出到XSL中的html:输出开始了,我的xsl:value-of标签中的disable-output-escaping让我超过了一层HTML编码。
但是以下XSL:
<xsl:for-each select = "//CONTENT/RECORD">
<xsl:value-of disable-output-escaping="yes" select = "OVERVIEW" />
</xsl:for-each>
仅返回:
<p><strong>hello world</strong></p>
它不会让我一直回到原始输入<p><strong>hello world</strong></p>
所以我一直在寻找一种方法来“加倍”或“禁用输出 - 逃避=”是“两次。”
我是如何在XSL中做到这一点的?
答案 0 :(得分:1)
我的理解是你不能在XSLT中使用disable-output-escaping两次,这是一个不影响转换过程的序列化选项。您可以在序列化时注释输出节点不被转义,就是这样。如果您需要双重unescape,则需要预处理输入文档,或使用扩展功能。
答案 1 :(得分:1)
请记住,“unescapes”内容的操作被正确地称为解析,而“转义”它的操作称为序列化。因此,要执行两个级别的unescaping,请调用parse(parse(X))。在一些XSLT处理器(如Saxon)中可以使用扩展函数来执行parse()和serialize()操作,在其他处理器中,您可以自己编写。