XSLT 2.0 - 增量的Sum元素名称

时间:2015-12-07 17:07:54

标签: xml xslt xslt-2.0

我正在努力生成元素名称的总和,当它们存在时会递增。

XML示例:

<Distributions>
<DIST_DISTRIBUTIONMETHOD_1>Check to Other</DIST_DISTRIBUTIONMETHOD_1>
<DIST_CREDITOR_1>MOTORS FINANCE</DIST_CREDITOR_1>
<DIST_AMOUNT_1>16710.04</DIST_AMOUNT_1>
<DIST_NET_1>No</DIST_NET_1>
<DIST_DISTRIBUTIONMETHOD_2>Check to Other</DIST_DISTRIBUTIONMETHOD_2>
<DIST_CREDITOR_2>WILLIAM HOOK</DIST_CREDITOR_2>
<DIST_AMOUNT_2>1239.86</DIST_AMOUNT_2>
<DIST_NET_2>Yes</DIST_NET_2>
</Distributions>

我需要总结DIST_AMOUNT_1,2等,总共可能存在15个可能存在或可能不存在的情况。

因此,在检查变量是否存在之后,我已将每个DIST_AMOUNT分配给变量。总和本身就是我遇到问题的地方,因为没有任何东西可以填充这笔款项而且我不知道为什么,我已经打败了我的头,并且现在用谷歌搜索答案。任何帮助表示赞赏。

我的XSL代码因此:

<xsl:variable name="DIST_TMP_1">
            <xsl:choose>
                <xsl:when test="//DIST_AMOUNT_1">
                    <xsl:value-of select="number(//DIST_AMOUNT_1)"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="number(0.00)"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="DIST_TMP_2">
            <xsl:choose>
                <xsl:when test="//DIST_AMOUNT_2">
                    <xsl:value-of select="number(//DIST_AMOUNT_2)"/>
                </xsl:when>                 
                <xsl:otherwise>
                    <xsl:value-of select="number(0.00)"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable> 
        <xsl:variable name="DIST_TMP_3">
            <xsl:choose>
                <xsl:when test="//DIST_AMOUNT_3">
                    <xsl:value-of select="number(//DIST_AMOUNT_3)"/>
                </xsl:when>                 
                <xsl:otherwise>
                    <xsl:value-of select="number(0.00)"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:element name="ECD070_TOTAL_VAR">
            <xsl:value-of select="sum($DIST_TMP_1+$DIST_TMP_2+DIST_TMP_3)"/>
        </xsl:element>

1 个答案:

答案 0 :(得分:2)

为什么你不能简单地做:

<xsl:value-of select="sum(/Distributions/*[starts-with(name(), 'DIST_AMOUNT_')])" />

或者,如果你必须明确,请执行:

<xsl:value-of select="sum((DIST_AMOUNT_1, DIST_AMOUNT_2, DIST_AMOUNT_3, ... DIST_AMOUNT_15))" />

(这是Distributions的背景)。没有必要测试这些中的每一个是否存在:将忽略不存在的节点。