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

时间:2017-04-06 14:15:33

标签: xml xslt-2.0 saxon

例如,使用输入文档:

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

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

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

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

1 个答案:

答案 0 :(得分:3)

撒克逊肯定会做这个优化。但规范中没有任何内容可以保证它。并且可能存在一些不会发生的情况,例如try / catch中的执行策略可能有点不同。但一般来说,大多数中途不错的XSLT处理器在编写EXPR [1]时都会避免完全评估EXPR。