XSLT 2.0 - 对递增的元素名称求和

XSLT 2.0 - Sum Element Names that Increment

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

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>

为什么你不能简单地做:

<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 的上下文)。无需测试每一个节点是否存在:不存在的节点将被忽略。