由于disable-output-escaping在firefox上不起作用(并且不会),那么在XSTL转换的输出中包含原始标记的下一个最佳方法是什么?
(背景:我在数据库中有原始HTML,我想用XML包装发送到浏览器进行渲染。我已经控制了XML和样式表,但是没有对HTML的控制,可能形成不好(甚至对于HTML!))
由于
答案 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 & M < sufficient</t>
答案 1 :(得分:0)
XSLT不是关于标记,而是关于树。
在XSLT1中,您无法获取格式错误的输入。在XSLT2中你可以,但是当然你放松了xpath navegation。
因此,如果没有“disable-output-escaping”机制,则无法输出可能的格式错误的树。这是一个功能!