每个循环中变量的XSLT总和不';不行?

每个循环中变量的XSLT总和不';不行?,xslt,apache-fop,Xslt,Apache Fop,我需要在for-each循环中打印多个数字的总和,我尝试了这种语法,因为如果之前没有解析,则无法添加数字,但即使变量$result正确地是一个数字,结果也始终保持为0 这是我的辛塔克斯: 不能在XSLT中重新定义变量。$sum变量定义为0,无法重新定义 如果不重用$sum变量,代码工作正常 <xsl:template match="/"> <xsl:for-each select="Details/Package/Items"> <xsl:

我需要在for-each循环中打印多个数字的总和,我尝试了这种语法,因为如果之前没有解析,则无法添加数字,但即使变量$result正确地是一个数字,结果也始终保持为0

这是我的辛塔克斯:


不能在XSLT中重新定义变量。$sum变量定义为0,无法重新定义

如果不重用$sum变量,代码工作正常

<xsl:template match="/">
    <xsl:for-each select="Details/Package/Items">
        <xsl:variable name="int" select="substring-before(IWeight,',')"/>
        <xsl:variable name="dec" select="substring-after(IWeight, ',')"/>
        <xsl:variable name="result" select="number(concat($int,'.',$dec))"/>
        <xsl:variable name="sum" select="$result" />
        <xsl:value-of select="$sum"/>
    </xsl:for-each>
</xsl:template>

看到它在这里工作:

编辑:

以下是如何获得每个详细信息节点的IWeight之和:

<xsl:template match="/Details">
    <xsl:variable name="weight">
        <xsl:for-each select="Package/Items/IWeight">
            <w>
                <xsl:value-of select="translate(.,',','.')"/>
            </w>
        </xsl:for-each>
    </xsl:variable>
   <xsl:value-of select="sum($weight/w)"/>
</xsl:template>

看到它在这里工作:


根据前面的回答:

您能发布XML文件的最小子集吗?这样我们就可以看到您使用的属性中有什么了?@Sebastien我用一个简单的XML示例编辑了我的帖子。我知道Items下有TotalWeight,但它不是为整个XML中的所有包设置的,因为它不起作用
xsl:for-each
不是一个循环。不,对不起,但是模板的结果会像concat(1,2.5)一样返回=12.5但我需要做1+2.5=3.5那么您想要的是文档中所有IWeight的总和?是的,对于xml中的每个细节,我想要项的总和权重,但在我必须解析它之前,我不知道如何使用它,但当我调用此模板apache fop时,给我以下错误:org.apache.xpath.objects.XRTreeFrag无法转换为org.apache.xpath.objects.XNodeSetIn XSLT 1.0中,如果要对结果树片段中的元素求和(本例中变量所包含的元素),则需要使用
node-set()
扩展函数。或者使用递归命名模板以增量方式生成和。