3

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

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

关于为什么会发生这种情况的任何想法?

4

2 回答 2

7

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

于 2015-04-02T22:47:14.060 回答
1

从 XSLT 3.0 规范:

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

于 2015-04-02T22:19:12.710 回答