在choose语句中的xslt中添加两个变量

时间:2010-08-30 06:07:03

标签: xslt variables

<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是传递给此模板的参数。任何人都可以根据不同的类别代码帮我做总结吗?

3 个答案:

答案 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(正如错误消息所示) 。实际上,您正在尝试使用您声明的变量来计算总和。

我不确定您要完成的任务,但如果您向我们提供有关此问题的更多信息,我相信我们可以帮助您找到更好的解决方案。