以下を使用して金額を合計できます。
<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>