在try / catch中disable-output-escaping =“yes”失败

时间:2015-04-02 22:09:25

标签: xml xslt saxon xslt-3.0

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

<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;

有关为何发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:7)

有趣的一个。只有在将输出直接从变换器写入串行器时(即,有效地绕过结构树的构造时),禁用输出转义才有效。在xsl:try中,输出不能直接写入串行器,因为它可能需要回滚&#34;如果发生动态错误;所以它被有效地写入一个隐藏的内部变量,当其知道没有发生故障时,其内容仅被发送到串行器。由于禁用 - 输出 - 转义是非常多的实现定义,因此这种行为不符合要求,但至少可以预期它会被记录下来。

答案 1 :(得分:1)

来自XSLT 3.0规范:

  

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