Xml 在for each中添加到XSL变量

Xml 在for each中添加到XSL变量,xml,xslt,xslt-2.0,xpath-2.0,Xml,Xslt,Xslt 2.0,Xpath 2.0,我希望在每次遍历for-each时将变量的值附加到它自己,问题是我不确定如何进行。以下是我目前拥有的: <xsl:variable name="lineQty" select="0" /> <xsl:for-each select="/*/*/*/*/*/xsales:CustInvoiceTrans"> <xsl:value-of select="$lineQty + (xsales:LineNum * xsales:Qty)" /> </xsl:

我希望在每次遍历for-each时将变量的值附加到它自己,问题是我不确定如何进行。以下是我目前拥有的:

<xsl:variable name="lineQty" select="0" />
<xsl:for-each select="/*/*/*/*/*/xsales:CustInvoiceTrans">
  <xsl:value-of select="$lineQty + (xsales:LineNum * xsales:Qty)" />
</xsl:for-each>
<test>
  <xsl:value-of select="$lineQty" />
</test>
这只输出0

编辑 我将其更改为以下内容:

<xsl:variable name="lineQty">
  <xsl:for-each select="/*/*/*/*/*/xsales:CustInvoiceTrans">
    <xsl:value-of select="xsales:LineNum * xsales:Qty" />
  </xsl:for-each>
</xsl:variable>

但这输出12345。这样做的原因是,它是1x1、2x1、3x1、4x1、5x1完成的,因为我的5行每行的数量都是1。所以现在需要做的就是将这些值相加,这可能吗?

您使用的是XSLT2.0吗?如果是,请尝试以下方法:

    <xsl:variable name="seq" as="xs:double*">
        <xsl:for-each select="/*/*/*/*/*/xsales:CustInvoiceTrans">
            <xsl:sequence select="xs:double(xsales:LineNum) *  xs:double(xsales:Qty)"/>
        </xsl:for-each>
    </xsl:variable>
    <test>
        <xsl:value-of select="sum($seq)"/>
    </test>
编辑

@马库斯建议更简短的版本:

    <test>
        <xsl:value-of select="sum(/*/*/*/*/*/xsales:CustInvoiceTrans/(xs:double(xsales:LineNum) * xs:double(xsales:Qty)))" />
    </test>

谢谢:

您正在使用XSLT2.0吗?如果是,请尝试以下方法:

    <xsl:variable name="seq" as="xs:double*">
        <xsl:for-each select="/*/*/*/*/*/xsales:CustInvoiceTrans">
            <xsl:sequence select="xs:double(xsales:LineNum) *  xs:double(xsales:Qty)"/>
        </xsl:for-each>
    </xsl:variable>
    <test>
        <xsl:value-of select="sum($seq)"/>
    </test>
编辑

@马库斯建议更简短的版本:

    <test>
        <xsl:value-of select="sum(/*/*/*/*/*/xsales:CustInvoiceTrans/(xs:double(xsales:LineNum) * xs:double(xsales:Qty)))" />
    </test>

谢谢:

XSLT实际上不允许您将值重新分配给变量-它们是固定的-因此这里的值为0。还有其他方法可以实现这一点吗?我希望将每个xsales:LineNum*xsales:Qty的结果添加到一起?是否也可以添加源xml?xsales:LineNum和xsales:Qty的值都存在且正确,因为我在xslt的另一个位置也使用了for!XSLT实际上不允许您将一个值重新分配给一个变量-它们是固定的-因此这里的值为0。还有其他方法可以实现这一点吗?我希望将每个xsales:LineNum*xsales:Qty的结果添加到一起?是否也可以添加源xml?xsales:LineNum和xsales:Qty的值都存在且正确,因为我在xslt的另一个位置也使用了for!您可以将其压缩为:sum/*/*/*/*/*/*/xsales:custinovicetrans/xs:doublexsales:LineNum*xs:doublexsales:QtyI我正在使用XSLT 2.0,但我似乎没有xs名称空间?当我遇到这个错误时:未声明的名称空间前缀xsxs代表XML模式名称空间:xmlns:xs=在@markusjarderott建议的解决方案中不需要它。您可以将其压缩为:sum/*/*/*/*/*/*/*/*/*/*/*/xsales:custinoicetrans/xs:doublexsales:LineNum*xs:doublexsales:QtyI正在使用XSLT2.0,但我似乎没有xs名称空间?当我遇到这个错误时:未声明的名称空间前缀xsxs代表XML模式名称空间:xmlns:xs=在@MarkusJarderot提出的解决方案中不需要它