XSLT和转义的HTML字符串

时间:2015-10-20 08:35:48

标签: xslt

我有一个XML文档,其中包含一些我希望在输出文档中注入的转义HTML字符串。我有以下doc.xml

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="doc.xsl"?>
<doc>
 <str>&lt;p&gt;foo&lt;/p&gt;</str>
</doc>

doc.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<xsl:value-of select="doc/str" disable-output-escaping="yes" />
</body>
</html>
</xsl:template>

</xsl:stylesheet>

根据我在其他地方读到的内容(例如here),这应该有效,但事实并非如此,至少当我用Firefox 41打开文件时:输出显示为<p>foo</p>,没有标记的HTML解释。

1 个答案:

答案 0 :(得分:2)

disable-output-escaping是XSLT引擎的可选功能(请参阅XSLT规范section 16.4 "Disabling Output Escaping")。

有些引擎拥有它,主要是那些可以输出字符串的引擎(&#34;文档的序列化表示&#34;)。有些人不主要是那些不输出字符串的人。

Firefox中的引擎将一个DOM树直接转换为另一个DOM树,因此无法禁用任何输出转义,因为首先没有发生转义。

对于所有实际问题,XSLT是一种服务器端技术。如果您需要可靠的功能集,请在服务器上进行转换。