2015-10-20 79 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