以下を使用して金額を合計できます。
<xsl:variable name="amountSum" select="sum(root/*[substring(name(), 1, 6) = 'Amount'])"/>
root/*[substring(name(), 1, 6) = 'Amount']
名前が「Amount」で始まるすべての要素を選択するセレクターです。つまり、次を選択します: Amount1
、Amount2
、 ...
次の場合は、はるかに簡単です。
- 要素が同じ名前 (例:
Amount
) の場合、合計は次のようになります。<xsl:variable name="amountSum" select="sum(Amount)"/>
- 一部の親のすべての要素を合計できます。合計は次のようになります:
<xsl:variable name="amountSum" select="sum(parentElement/*)"/>
(これは のすべての要素を合計しますparentElement
)
次に、値を比較できます。
<xsl:if test="OriginalAmount > $amountSum">.. sum is smaller ..</xsl:if>
(比較するより>
代わりに使うほうがいいです)>
実際の例を参照してください:
ソース XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<OriginalAmount>2.2100</OriginalAmount>
<Amount1>1.0000</Amount1>
<Amount2>0.0000</Amount2>
<Amount3>1.0000</Amount3>
<Amount4>0.0000</Amount4>
</root>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
<xsl:variable name="amountSum" select="sum(root/*[substring(name(), 1, 6) = 'Amount'])"/>
<xsl:value-of select="$amountSum"/>
<xsl:choose>
<xsl:when test="root/OriginalAmount > $amountSum">greater</xsl:when>
<xsl:otherwise>less</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>