【问题标题】:disable-output-escaping="yes" is not working禁用输出转义=“是”不起作用
【发布时间】:2015-03-23 07:28:56
【问题描述】:

我有以下代码

<db:P_RECEIVED_XML>
        <xsl:value-of disable-output-escaping="yes" select="oraext:get-content-as-string(/ns0:ReceivedMessage/MessageContent/*)"/>
      </db:P_RECEIVED_XML>

当我测试这个转换时,将值设为

<MessageContent xmlns="">
      <any_0 xmlns="##any">
         <note>
         <name>GENERAL</name>
         <value><![CDATA[test ~<!@#$%^&*()_~!@#$%^&*()_+]]></value>
      </note>
      </any_0>
   </MessageContent>

渲染的输出是

<db:P_RECEIVED_XML><any_0 xmlns="##any">
         <note>
         <name>GENERAL</name>
         <value>test ~&lt;!@#$%^&amp;*()_~!@#$%^&amp;*()_+</value>
      </note>
      </any_0>
</db:P_RECEIVED_XML>

这里&amp;amp; 转换为&amp;amp; 虽然我使用了disable-output-escaping="yes"。

请帮忙。

【问题讨论】:

  • 请通过按原样运行发布可以显示问题的代码!
  • 这取决于渲染的内容,disable-output-escaping 仅在 XSLT procrssor 负责将输出 xml 序列化为字节时才有效,如果它位于管道中间,将其输出作为一些一种 dom 树,然后在序列化之前由其他组件进一步处理,然后 d-o-e 将不起作用。

标签: xslt


【解决方案1】:

您已将问题标记为 XSLT。在 XSLT 中,使用:

<xsl:value-of select="your-node-here" disable-output-escaping="yes" />

会禁用转义,并且不会&amp;amp; 输出为&amp;amp;

如果您看到不同的结果,可能是因为您使用了扩展 oraext:get-content-as-string() 函数。尝试删除它,看看你会得到什么。

【讨论】:

    【解决方案2】:

    disable-output-escaping 仅在 XSLT 处理器生成的结果树被立即序列化并且序列化在 XSLT 处理器的控制下才有效。这意味着,例如,如果将结果写入 DOM 树,然后使用 DOM 序列化来生成词法 XML,则它不起作用。

    XSLT 处理器可以完全忽略禁用输出转义。

    所以这基本上取决于您使用的是什么 XSLT 处理器以及如何运行它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      相关资源
      最近更新 更多