2015-10-20 80 views
0

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

<?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解释。

回答

2

disable-output-escaping是XSLT引擎的一个可选特征(参见XSLT规范,section 16.4 "Disabling Output Escaping")。

一些发动机有它,主要是那些能够输出一个字符串(“的文件的序列化表示”)。有些不是,主要是那些不输出字符串的。

Firefox中的引擎直接转换一个DOM树到另一个DOM树,因此它不可能禁止任何输出转义,因为没有人能逃脱在首位发生。

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

+0

禁用输出转义同样不可靠的服务器端:一般来说,最好避免,尽管这是一个用例在那里它可能会有非常方便。处理转义的HTML字符串的另一种方法是将它们解析为节点树,这可以通过调用扩展函数来完成;细节再次取决于您使用的处理器。 –

+0

@MichaelKay我的观点是,在服务器端可以选择具有所需功能的XSLT处理器。之后,没有不可靠性。 – Tomalak