<xsl:choose>
<xsl:when test="$cty='LOHNSTD'">
<xsl:variable name="sum" select="$sum + $amt"/>
</xsl:when>
<xsl:when test="$cty='REGPAY'">
<xsl:variable name="sum1">
<xsl:value-of select="$sum1 + $amt"/>
</xsl:variable>
</xsl:when>
</xsl:choose>
在上面的代码中,它给出了警告消息,表示变量sum和sum1未声明。 amt和cty是传递给此模板的参数。任何人都可以根据不同的类别代码帮我做总结吗?
答案 0 :(得分:2)
如前所述,样式表片段存在两个问题:使用未声明的变量引用(xsl:variable name="sum" select="$sum + $amt"
),并忽略xsl:when
之外的变量范围。
如果你想在某些条件下声明一个值为deppending的变量,那么Ledhund的答案是正确的选择:在变量的内容模板中使用xsl:choose
。
此外,如果sum的条款是节点集,则可以使用以下表达式:
sum($A|$B[$cty='LOHNSTD']|$C[$cty='REGPAY'])
或
$A + $B[$cty='LOHNSTD'] + $C[$cty='REGPAY']
如果你试图抓住已经声明的变量的值,那么你应该重构你的转换,因为它在XSLT的任何声明范例中都不可能。
答案 1 :(得分:0)
如果你可以在没有两个和变量的情况下生活,我会像这样做
<xsl:variable name="sum">
<xsl:choose>
<xsl:when test="$cty='LOHNSTD'">
<xsl:value-of select="$something + $amt"/>
</xsl:when>
<xsl:when test="$cty='REGPAY'">
<xsl:value-of select="$something_else + $amt"/>
</xsl:when>
</xsl:choose>
</xsl:variable>
但是,如果主要的是根据某些条件增加变量的值,则不能。变量是固定的。
答案 2 :(得分:0)
首先,您不能在choose
构造中声明变量并在其他地方使用它。没有后续兄弟指令的变量是没用的。
在您的示例中,您有两个问题,即上面提到的问题,并且您在声明变量之前尝试使用变量$sum
和$sum1
(正如错误消息所示) 。实际上,您正在尝试使用您声明的变量来计算总和。
我不确定您要完成的任务,但如果您向我们提供有关此问题的更多信息,我相信我们可以帮助您找到更好的解决方案。