Xslt 将一个变量设置为其他两个变量中较小的一个
当我尝试使用下面的代码时,我得到了一个重复的变量错误,因为变量是不可变的。如何将两个变量(Xslt 将一个变量设置为其他两个变量中较小的一个,xslt,Xslt,当我尝试使用下面的代码时,我得到了一个重复的变量错误,因为变量是不可变的。如何将两个变量($nextSubPartPos和$nextquestionstepos)中的较小者设置为新变量($nextQuestionPos) XSLT中的变量是不可变的。这让我多次感到困惑。XSLT中的变量是不可变的。这已经让我犯了很多次错误。不要关闭第一行中的xsl:variable节点。也就是说,将/取出,然后在之后放置一个。接下来,将choose to节点中的节点更改为节点 也就是说,您希望使用choose设
$nextSubPartPos
和$nextquestionstepos
)中的较小者设置为新变量($nextQuestionPos
)
XSLT中的变量是不可变的。这让我多次感到困惑。XSLT中的变量是不可变的。这已经让我犯了很多次错误。不要关闭第一行中的xsl:variable节点。也就是说,将/取出,然后在
之后放置一个
。接下来,将choose to
节点中的
节点更改为
节点
也就是说,您希望使用choose设置变量的值。有两种方法可以设置变量的值。一个是选择属性,另一个是节点的内部文本
<xsl:variable name="nextQuestionPos">
<xsl:choose>
<xsl:when test="$nextSubPartPos < $nextQuestionStemPos">
<xsl:value-of select="$nextSubPartPos"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$nextSubPartPos"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
不要关闭第一行中的xsl:variable节点。也就是说,将/取出,然后在
之后放置一个
。接下来,将choose to
节点中的
节点更改为
节点
也就是说,您希望使用choose设置变量的值。有两种方法可以设置变量的值。一个是选择属性,另一个是节点的内部文本
<xsl:variable name="nextQuestionPos">
<xsl:choose>
<xsl:when test="$nextSubPartPos < $nextQuestionStemPos">
<xsl:value-of select="$nextSubPartPos"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$nextSubPartPos"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
只需使用
min
功能:
<xsl:variable name="a" select="42" />
<xsl:variable name="b" select="23" />
<xsl:variable name="x" select="min(($a,$b))" />
在您的示例中,将整个代码替换为:
<xsl:variable name="nextQuestionPos" select="min(($nextSubPartPos,$nextQuestionStemPos))" />
Saxon在全局命名空间中实现min。其他处理器可能需要名称空间,正确的名称空间(通常表示为
fn
)是http://www.w3.org/2005/02/xpath-functions
只需使用min
功能:
<xsl:variable name="a" select="42" />
<xsl:variable name="b" select="23" />
<xsl:variable name="x" select="min(($a,$b))" />
在您的示例中,将整个代码替换为:
<xsl:variable name="nextQuestionPos" select="min(($nextSubPartPos,$nextQuestionStemPos))" />
Saxon在全局命名空间中实现min。其他处理器可能需要名称空间,正确的名称空间(通常表示为
fn
)是http://www.w3.org/2005/02/xpath-functions
计算值较小的紧凑XPath 1.0表达式是:
$v1*($v2>=$v1)+$v2*($v1>$v2)
其中,$v1和$v2变量包含要比较的值
因此,一个优雅的单行XSLT 1.0解决方案如下所示:
根据XSLT 2.0中的要求定义变量更容易:
可以使用以下(更可读的)一行程序:
如果($v2 gt$v1)然后是$v1
else$v2 或者更紧凑:
min(($v1,$v2))计算值较小的紧凑XPath 1.0表达式是: $v1*($v2>=$v1)+$v2*($v1>$v2) 其中,$v1和$v2变量包含要比较的值 因此,一个优雅的单行XSLT 1.0解决方案如下所示: 根据XSLT 2.0中的要求定义变量更容易: 可以使用以下(更可读的)一行程序: 如果($v2 gt$v1)
然后是$v1
else$v2 或者更紧凑:
min($v1,$v2))有什么办法可以得到两个中较大的一个吗?@joe,是的。在我的回答中用max替换min,或在问题中用max替换