将变量设置为另外两个变量中较小的一个

joe*_*joe 1 xslt

当我尝试使用下面的代码时,我得到一个重复的变量错误,因为变量是不可变的.如何将两个变量($nextSubPartPos$nextQuestionStemPos)中较小的一个设置为我的新变量($nextQuestionPos)?

        <xsl:variable name="nextQuestionPos"/>
        <xsl:choose>
            <xsl:when test="$nextSubPartPos &lt; $nextQuestionStemPos">
                <xsl:variable name="nextQuestionPos" select="$nextSubPartPos"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:variable name="nextQuestionPos" select="$nextSubPartPos"/>
            </xsl:otherwise>
        </xsl:choose>
Run Code Online (Sandbox Code Playgroud)

Dim*_*hev 5

一个评估为较小值的紧凑型XPath 1.0表达式是:

    $ v1*($ v2> = $ v1)+ $ v2*($ v1> $ v2)

其中$ v1和$ v2变量包含要比较的值.

因此,优雅的单行XSLT 1.0解决方案将如下所示:

    <xsl:variable name ="v3"select ="$ v1*($ v2> = $ v1)+ $ v2*($ v1> $ v2)"/>

根据XSLT 2.0中的要求定义变量更容易:

可以使用以下(更易读)单行:

    if($ v2 gt $ v1)
                则$ v1
                else $ v2

或者更紧凑:

    min(($ v1,$ v2))