当不支持disable-output-escaping时,XSLT禁用输出转义

时间:2010-06-15 09:47:18

标签: firefox xslt

由于disable-output-escaping在firefox上不起作用(并且不会),那么在XSTL转换的输出中包含原始标记的下一个最佳方法是什么?

(背景:我在数据库中有原始HTML,我想用XML包装发送到浏览器进行渲染。我已经控制了XML和样式表,但是没有对HTML的控制,可能形成不好(甚至对于HTML!))

由于

2 个答案:

答案 0 :(得分:1)

您可以将违规文本放入CDATA部分

例如,这是一个格式良好的XML文档:

<t><![CDATA[M & M < sufficient]]></t>

这是一个XSLT转换,它将所选元素(<t>)的文本节点放在CDATA部分中:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes" />
 <xsl:output cdata-section-elements="t"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

</xsl:stylesheet>

结果是:

<t><![CDATA[M & M < sufficient]]></t>

如果没有<xsl:output cdata-section-elements="t"/>指令,结果将是:

<t>M &amp; M &lt; sufficient</t>

答案 1 :(得分:0)

XSLT不是关于标记,而是关于树。

在XSLT1中,您无法获取格式错误的输入。在XSLT2中你可以,但是当然你放松了xpath navegation。

因此,如果没有“disable-output-escaping”机制,则无法输出可能的格式错误的树。这是一个功能!