XSLT和转义的HTML字符串
问题描述:
我有一个XML文档,其中包含一些我要在输出文档中注入的转义HTML字符串。我有以下doc.xml
XSLT和转义的HTML字符串
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="doc.xsl"?>
<doc>
<str><p>foo</p></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解释。
答
disable-output-escaping
是XSLT引擎的一个可选特征(参见XSLT规范,section 16.4 "Disabling Output Escaping")。
一些发动机有它,主要是那些能够输出一个字符串(“的文件的序列化表示”)。有些不是,主要是那些不输出字符串的。
Firefox中的引擎直接转换一个DOM树到另一个DOM树,因此它不可能禁止任何输出转义,因为没有人能逃脱在首位发生。
对于所有的实际问题,XSLT是一种服务器端技术。如果您想要一个可靠的功能集,请在服务器上进行转换。
禁用输出转义同样不可靠的服务器端:一般来说,最好避免,尽管这是一个用例在那里它可能会有非常方便。处理转义的HTML字符串的另一种方法是将它们解析为节点树,这可以通过调用扩展函数来完成;细节再次取决于您使用的处理器。 –
@MichaelKay我的观点是,在服务器端可以选择具有所需功能的XSLT处理器。之后,没有不可靠性。 – Tomalak