【问题标题】:disable-output-escaping="yes" fails in try/catchdisable-output-escaping="yes" 在 try/catch 中失败
【发布时间】:2015-06-08 00:29:46
【问题描述】:

可能是撒克逊的一个错误,但只是想澄清一下-

<xsl:value-of select="unparsed-text('http://something/test.txt')" 
    disable-output-escaping="yes"/>

结果 -

<div>test</div>

现在试试-

<xsl:try>
 <xsl:value-of select="unparsed-text('http://something/test.txt')" 
    disable-output-escaping="yes"/>
<xsl:catch></xsl:catch>
</xsl:try>

结果-

&lt;div&gt;test&lt;/div&gt;

对为什么会发生这种情况有任何想法吗?

【问题讨论】:

    标签: xml xslt saxon xslt-3.0


    【解决方案1】:

    有趣的一个。禁用输出转义仅在您将输出直接从转换器写入序列化器时才有效(即,当有效地绕过结果树的构造时)。在 xsl:try 中,输出不能直接写入序列化程序,因为在发生动态错误时可能需要“回滚”;所以它被有效地写入了一个隐藏的内部变量,其内容仅在知道没有发生故障时才发送到序列化程序。由于 disable-output-escaping 很大程度上是由实现定义的,因此这种行为并非不符合规定,但至少期望它被记录在案是合理的。

    【讨论】:

    • 感谢您的回复。我现在可能会坚持只使用 unparsed-text-available() 而不是使用 try/catch 块 =)
    • 2018 更新:对于即将发布的 Saxon 9.9 版本,try/catch 缓冲输出的方式已更改,这导致disable-output-escaping 将起作用,当然前提是 try 的输出/catch 正在写入序列化程序。
    【解决方案2】:

    来自 XSLT 3.0 规范:

    出于向后兼容性的原因,XSLT 3.0 继续支持 XSLT 1.0 中引入的禁用输出转义功能。这是一个可选功能,不需要实现来支持它。

    【讨论】:

      猜你喜欢
      • 2012-07-19
      • 2023-03-17
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多