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

disable-output-escaping="yes" fails in try/catch

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

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

有没有想过为什么会这样?

来自 XSLT 3.0 规范:

For backwards compatibility reasons, XSLT 3.0 continues to support the disable-output-escaping feature introduced in XSLT 1.0. This is an optional feature and implementations are not required to support it.

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