Reputation: 3
How to sum xml value in child node 2 for condition child node 4 values in xslt.
I want to sum cac:TaxTotal/cac:TaxSubtotal/cbc:TaxAmount child node 2 values for child node 4 values cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cac:TaxScheme/cbc:TaxTyoecode = "0075"
XML
<cac:TaxTotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="TRL">189285.21</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="TRL">34071.34</cbc:TaxAmount>
<cbc:Percent>18.0000</cbc:Percent>
<cac:TaxCategory>
<cac:TaxScheme>
<cbc:Name>KDV</cbc:Name>
<cbc:TaxTypeCode>0015</cbc:TaxTypeCode>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="TRL">34678.36</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="TRL">82089.94</cbc:TaxAmount>
<cac:TaxCategory>
<cac:TaxScheme>
<cbc:Name>18</cbc:Name>
<cbc:TaxTypeCode>0075</cbc:TaxTypeCode>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="TRL">127.30</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="TRL">422.38</cbc:TaxAmount>
<cac:TaxCategory>
<cac:TaxScheme>
<cbc:Name>16</cbc:Name>
<cbc:TaxTypeCode>0075</cbc:TaxTypeCode>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="TRL">39.78</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="TRL">21.12</cbc:TaxAmount>
<cac:TaxCategory>
<cac:TaxScheme>
<cbc:Name>13</cbc:Name>
<cbc:TaxTypeCode>0075</cbc:TaxTypeCode>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="TRL">41.59</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="TRL">50.31</cbc:TaxAmount>
<cac:TaxCategory>
<cac:TaxScheme>
<cbc:Name>21</cbc:Name>
<cbc:TaxTypeCode>0075</cbc:TaxTypeCode>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="TRL">55.20</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="TRL">37.27</cbc:TaxAmount>
<cac:TaxCategory>
<cac:TaxScheme>
<cbc:Name>22</cbc:Name>
<cbc:TaxTypeCode>0075</cbc:TaxTypeCode>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="TRL">3378.19</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="TRL">15777.20</cbc:TaxAmount>
<cac:TaxCategory>
<cac:TaxScheme>
<cbc:Name>19</cbc:Name>
<cbc:TaxTypeCode>0075</cbc:TaxTypeCode>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="TRL">11797.30</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="TRL">40213.25</cbc:TaxAmount>
<cac:TaxCategory>
<cac:TaxScheme>
<cbc:Name>17</cbc:Name>
<cbc:TaxTypeCode>0075</cbc:TaxTypeCode>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="TRL">152.83</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="TRL">155.30</cbc:TaxAmount>
<cac:TaxCategory>
<cac:TaxScheme>
<cbc:Name>14</cbc:Name>
<cbc:TaxTypeCode>0075</cbc:TaxTypeCode>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="TRL">98.81</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="TRL">149.08</cbc:TaxAmount>
<cac:TaxCategory>
<cac:TaxScheme>
<cbc:Name>15</cbc:Name>
<cbc:TaxTypeCode>0075</cbc:TaxTypeCode>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
Upvotes: 0
Views: 161
Reputation: 70638
Assuming you have correctly defined the namespaces for the prefix cac
and cbc
, then I think this is the expression you want
<xsl:value-of
select="sum(cac:TaxTotal/cac:TaxSubtotal
[cac:TaxCategory/cac:TaxScheme/cbc:TaxTypeCode='0075']
/cbc:TaxAmount)" />
(I've spread it over multiple lines to try and make it a bit more readable)
You could also achieve this by means of a key
<xsl:key name="tax_by_code" match="cac:TaxSubtotal"
use="cac:TaxCategory/cac:TaxScheme/cbc:TaxTypeCode" />
Then the sum expression is simplified to this:
<xsl:value-of select="sum(key('tax_by_code', '0075')/cbc:TaxAmount)" />
Upvotes: 1