xslt 2.0 处理器是否优化仅选择序列中的第一项?

Do xslt 2.0 processors optimize selecting only the first item in a sequence?

例如,输入文档:

<root b="1" />

和样式表:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/*">
        <xsl:variable name="vTest" select="(@a, @b, @c)[1]" />
        <xsl:value-of select="$vTest" />
    </xsl:template>

</xsl:stylesheet>

XSLT 处理器是否通过不评估序列 (@a, @b, @c)[1] 中的 @c 项来进行优化?

以这种方式定义 vTest 的理由是尝试以更短的方式模拟 xsl:choose 逻辑。

我想这可能很难回答,我对 Saxon XSLT 2.0 处理器版本 9.5+ 特别感兴趣。

撒克逊肯定会做这个优化。但规范中没有任何内容可以保证这一点。并且在某些情况下可能不会发生,例如try/catch 中的执行策略可能略有不同。但通常是的,当您编写 EXPR[1].

时,大多数半途而废的 XSLT 处理器将避免完全评估 EXPR