How to sum xml value in child node 2 for condition child node 4 values in xslt

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

Answers (1)

Tim C
Tim C

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

Related Questions