【问题标题】:XSLT disable output escaping when disable-output-escaping is not supported不支持禁用输出转义时 XSLT 禁用输出转义
【发布时间】:2010-06-15 09:47:18
【问题描述】:

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

(背景:我在数据库中有原始 HTML,我想将其包装在 XML 中以发送到浏览器进行渲染。我可以控制 XML 和样式表,但无法控制 HTML,可能格式不正确(即使对于 HTML!))

谢谢

【问题讨论】:

    标签: firefox xslt


    【解决方案1】:

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

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

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

    这是一个 XSLT 转换,它将所选元素 (&lt;t&gt;) 的文本节点放在 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>
    

    如果没有&lt;xsl:output cdata-section-elements="t"/&gt; 指令,结果将是:

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

    【讨论】:

      【解决方案2】:

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

      在 XSLT1 中,您不能接受格式错误的输入。在 XSLT2 中你可以,但你当然会失去 xpath 导航。

      因此,如果没有“禁用输出转义”机制,您将无法输出可能格式错误的树。这是一个功能!

      【讨论】:

      • 老鼠们,我以为这就是答案,但我希望得到别的东西。啊,好吧。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      相关资源
      最近更新 更多