Я новичок в xslt.Я создаю преобразование, и мне нужно рассчитать сумму налога на основе ставки налога.Входной файл содержит различные налоговые ставки и сумму налога.Требование состоит в том, чтобы искать общие ставки налога, брать индивидуальную сумму налога и суммировать их все.При этом создается один элемент T
.
Если существует несколько налоговых ставок, группируйте общие суммы налогов и суммируйте их и формируйте T
элемент.
Например: Входной файл:
<DATA>
<LIST_G_TRX>
<G_TRX>
<LIST_G_HEADER>
<G_HEADER>
<COUNTRYCODE>500</COUNTRYCODE>
<INVOICENUMBER>55005</INVOICENUMBER>
<CUSTOMER_TRX_ID>182066</CUSTOMER_TRX_ID>
<CUSTOMERID>5002013</CUSTOMERID>
<CUSTOMERORDERNUMBER>001</CUSTOMERORDERNUMBER>
<ORDERDATE>2019-01-09T00:00:00.000+00:00</ORDERDATE>
<INVOICEDATE>2019-01-09</INVOICEDATE>
<BILLTOCONTACT>XXXLutz Logistik AG</BILLTOCONTACT>
<BILLTONAME>XXXLutz Logistik AG</BILLTONAME>
<BILLTOADDRESS1>Römerstraße 999</BILLTOADDRESS1>
<BILLTOADDRESS2/>
<BILLTOADDRESS3/>
<BILLTOCITY>Wels</BILLTOCITY>
<BILLTOPOSTALCODE>4600</BILLTOPOSTALCODE>
<BILLTOCOUNTRYCODE>AT</BILLTOCOUNTRYCODE>
<CONTACTPHONENUMBER>11111111</CONTACTPHONENUMBER>
<CONTACTPHONEEXT/>
<CURRENCY>EUR</CURRENCY>
<CUSTOMERTAXID>ATU64784111</CUSTOMERTAXID>
<ODTAXID>FN 150931</ODTAXID>
<INVOICETYPE>R</INVOICETYPE>
<TOTALINVOICEVALUE>124.8</TOTALINVOICEVALUE>
<TOTALTAXABLEAMOUNT>104</TOTALTAXABLEAMOUNT>
<TOTALTAX>20.80</TOTALTAX>
<TOTALMISCCHARGE>0.00</TOTALMISCCHARGE>
<TOTALDETAILPRICE/>
<PAYERCUSTOMERID>5002013</PAYERCUSTOMERID>
<PAYERCONTACT>XXXLutz Logistik AG</PAYERCONTACT>
<PAYERNAME>XXXLutz Logistik AG</PAYERNAME>
<PAYERADDRESS1>Filialnummer ZL</PAYERADDRESS1>
<PAYERADDRESS2>Gewerbestrasse 29</PAYERADDRESS2>
<PAYERADDRESS3/>
<PAYERCITY>Sattledt</PAYERCITY>
<PAYERPOSTALCODE>4642</PAYERPOSTALCODE>
<PAYERCOUNTRY>AT</PAYERCOUNTRY>
<PAYERPHONENUMBER>22222222</PAYERPHONENUMBER>
<PAYERPHONEEXT/>
<SOLDTOCUSTOMERID>5002013</SOLDTOCUSTOMERID>
<SOLDTONAME>XXXLutz Logistik AG</SOLDTONAME>
<SOLDTOADDRESS1>Filialnummer ZL</SOLDTOADDRESS1>
<SOLDTOADDRESS2>Gewerbestrasse 29</SOLDTOADDRESS2>
<SOLDTOADDRESS3/>
<SOLDTOCITY>Sattledt</SOLDTOCITY>
<SOLDTOPOSTALCODE>4642</SOLDTOPOSTALCODE>
<SOLDTOCOUNTRY>AT</SOLDTOCOUNTRY>
<SOLDTOPHONENUMBER>22222222</SOLDTOPHONENUMBER>
<SOLDTOPHONEEXT/>
<SUPPLIERNAME>Viking Direkt GesmbH</SUPPLIERNAME>
<SUPPLIERADDRESS1>Tragweiner Str. 57</SUPPLIERADDRESS1>
<SUPPLIERADDRESS2/>
<SUPPLIERADDRESS3/>
<SUPPLIERCITY>Pregarten</SUPPLIERCITY>
<SUPPLIERPOSTALCODE>4230</SUPPLIERPOSTALCODE>
<SUPPLIERCOUNTRY>AT</SUPPLIERCOUNTRY>
<SUPPLIERPHONENUMBER/>
<SUPPLIERPHONEEXT/>
<REFERENCEINVOICENUMBER/>
<CREDITCARDNUMBER/>
<EMAILADDRESS/>
<DUEDATE>2019-01-14T00:00:00.000+00:00</DUEDATE>
<CREDITNOTEREASON/>
<LAST_PRINTED_DATE>2019-01-10T12:47:28.000+00:00</LAST_PRINTED_DATE>
<FIRST_PRINT_DATE>2019-01-10T12:47:28.000+00:00</FIRST_PRINT_DATE>
<PRINTING_COUNT>1</PRINTING_COUNT>
<TRANSACTION_SOURCE>Distributed Order Orchestration</TRANSACTION_SOURCE>
<LIST_G_LINES>
<G_LINES>
<CUSTOMER_TRX_ID>182066</CUSTOMER_TRX_ID>
<COUNTRYCODE>500</COUNTRYCODE>
<CUSTOMERID>5002013</CUSTOMERID>
<CUSTOMERORDERNUMBER>001</CUSTOMERORDERNUMBER>
<DELIVERYNOTENUMBER/>
<DELIVERYNOTELINENUMBER/>
<DELIVERYDATE>2019-01-09T00:00:00.000+00:00</DELIVERYDATE>
<INVOICELINENUMBER>2</INVOICELINENUMBER>
<ITEMNUMBER>6873291</ITEMNUMBER>
<INVOICEDQUANTITY>1</INVOICEDQUANTITY>
<PRICE>-20</PRICE>
<LINEAMOUNT>-20.00</LINEAMOUNT>
<ORDERNUMBER>840</ORDERNUMBER>
<UNITOFMEASURE>EA</UNITOFMEASURE>
<INVOICENUMBER>55005</INVOICENUMBER>
<TAXRATE/>
<TAXAMOUNT/>
<TAXCODE/>
<ITEMDESCRIPTION/>
<SHIPTOCONTACT/>
<SHIPTONAME>XXXLutz Logistik AG</SHIPTONAME>
<SHIPTOADDRESS1>Filialnummer ZL</SHIPTOADDRESS1>
<SHIPTOADDRESS2>Gewerbestrasse 29</SHIPTOADDRESS2>
<SHIPTOADDRESS3/>
<SHIPTOCITY>Sattledt</SHIPTOCITY>
<SHIPTOPOSTALCODE>4642</SHIPTOPOSTALCODE>
<SHIPTOCOUNTRY>AT</SHIPTOCOUNTRY>
<CONTACTPHONENUMBER>22222222</CONTACTPHONENUMBER>
<CONTACTPHONEEXT/>
<ORDERTYPE>R</ORDERTYPE>
<ORDERLINENUMBER>1</ORDERLINENUMBER>
<ORDERDATE>2019-01-09</ORDERDATE>
<CUSTOMERITEMDESCRIPTION/>
<INVOICELINECOMMENT1/>
<INVOICELINECOMMENT2/>
<TRANSACTIONID/>
<CUSTOMERCOSTCENTER/>
<CUSTOMERITEMNUMBER/>
<CUSTOMERORDERLINENUMBER/>
<ORDEREDQTY>1</ORDEREDQTY>
<SHIPPEDQTY>1</SHIPPEDQTY>
</G_LINES>
<G_LINES>
<CUSTOMER_TRX_ID>182066</CUSTOMER_TRX_ID>
<COUNTRYCODE>500</COUNTRYCODE>
<CUSTOMERID>5002013</CUSTOMERID>
<CUSTOMERORDERNUMBER>001</CUSTOMERORDERNUMBER>
<DELIVERYNOTENUMBER/>
<DELIVERYNOTELINENUMBER/>
<DELIVERYDATE/>
<INVOICELINENUMBER/>
<ITEMNUMBER/>
<INVOICEDQUANTITY/>
<PRICE/>
<LINEAMOUNT/>
<ORDERNUMBER/>
<UNITOFMEASURE/>
<INVOICENUMBER>55005</INVOICENUMBER>
<TAXRATE>20</TAXRATE>
<TAXAMOUNT>24.80</TAXAMOUNT>
<TAXCODE/>
<ITEMDESCRIPTION>HP 7612 e-All-in-One-GroAformatdrucker</ITEMDESCRIPTION>
<SHIPTOCONTACT/>
<SHIPTONAME/>
<SHIPTOADDRESS1/>
<SHIPTOADDRESS2/>
<SHIPTOADDRESS3/>
<SHIPTOCITY/>
<SHIPTOPOSTALCODE/>
<SHIPTOCOUNTRY/>
<CONTACTPHONENUMBER/>
<CONTACTPHONEEXT/>
<ORDERTYPE>R</ORDERTYPE>
<ORDERLINENUMBER/>
<ORDERDATE/>
<CUSTOMERITEMDESCRIPTION/>
<INVOICELINECOMMENT1/>
<INVOICELINECOMMENT2/>
<TRANSACTIONID/>
<CUSTOMERCOSTCENTER/>
<CUSTOMERITEMNUMBER/>
<CUSTOMERORDERLINENUMBER/>
<ORDEREDQTY/>
<SHIPPEDQTY/>
</G_LINES>
<G_LINES>
<CUSTOMER_TRX_ID>182066</CUSTOMER_TRX_ID>
<COUNTRYCODE>500</COUNTRYCODE>
<CUSTOMERID>5002013</CUSTOMERID>
<CUSTOMERORDERNUMBER>001</CUSTOMERORDERNUMBER>
<DELIVERYNOTENUMBER/>
<DELIVERYNOTELINENUMBER/>
<DELIVERYDATE/>
<INVOICELINENUMBER/>
<ITEMNUMBER/>
<INVOICEDQUANTITY/>
<PRICE/>
<LINEAMOUNT/>
<ORDERNUMBER/>
<UNITOFMEASURE/>
<INVOICENUMBER>55005</INVOICENUMBER>
<TAXRATE>20</TAXRATE>
<TAXAMOUNT>-4.00</TAXAMOUNT>
<TAXCODE/>
<ITEMDESCRIPTION>HP</ITEMDESCRIPTION>
<SHIPTOCONTACT/>
<SHIPTONAME/>
<SHIPTOADDRESS1/>
<SHIPTOADDRESS2/>
<SHIPTOADDRESS3/>
<SHIPTOCITY/>
<SHIPTOPOSTALCODE/>
<SHIPTOCOUNTRY/>
<CONTACTPHONENUMBER/>
<CONTACTPHONEEXT/>
<ORDERTYPE>R</ORDERTYPE>
<ORDERLINENUMBER/>
<ORDERDATE/>
<CUSTOMERITEMDESCRIPTION/>
<INVOICELINECOMMENT1/>
<INVOICELINECOMMENT2/>
<TRANSACTIONID/>
<CUSTOMERCOSTCENTER/>
<CUSTOMERITEMNUMBER/>
<CUSTOMERORDERLINENUMBER/>
<ORDEREDQTY/>
<SHIPPEDQTY/>
</G_LINES>
<G_LINES>
<CUSTOMER_TRX_ID>182066</CUSTOMER_TRX_ID>
<COUNTRYCODE>500</COUNTRYCODE>
<CUSTOMERID>5002013</CUSTOMERID>
<CUSTOMERORDERNUMBER>001</CUSTOMERORDERNUMBER>
<DELIVERYNOTENUMBER/>
<DELIVERYNOTELINENUMBER/>
<DELIVERYDATE>2019-01-09T00:00:00.000+00:00</DELIVERYDATE>
<INVOICELINENUMBER>1</INVOICELINENUMBER>
<ITEMNUMBER>6873291</ITEMNUMBER>
<INVOICEDQUANTITY>1</INVOICEDQUANTITY>
<PRICE>124</PRICE>
<LINEAMOUNT>124.00</LINEAMOUNT>
<ORDERNUMBER>840</ORDERNUMBER>
<UNITOFMEASURE>EA</UNITOFMEASURE>
<INVOICENUMBER>55005</INVOICENUMBER>
<TAXRATE/>
<TAXAMOUNT/>
<TAXCODE/>
<ITEMDESCRIPTION/>
<SHIPTOCONTACT/>
<SHIPTONAME>XXXLutz Logistik AG</SHIPTONAME>
<SHIPTOADDRESS1>Filialnummer ZL</SHIPTOADDRESS1>
<SHIPTOADDRESS2>Gewerbestrasse 29</SHIPTOADDRESS2>
<SHIPTOADDRESS3/>
<SHIPTOCITY>Sattledt</SHIPTOCITY>
<SHIPTOPOSTALCODE>4642</SHIPTOPOSTALCODE>
<SHIPTOCOUNTRY>AT</SHIPTOCOUNTRY>
<CONTACTPHONENUMBER>22222222</CONTACTPHONENUMBER>
<CONTACTPHONEEXT/>
<ORDERTYPE>R</ORDERTYPE>
<ORDERLINENUMBER>1</ORDERLINENUMBER>
<ORDERDATE>2019-01-09</ORDERDATE>
<CUSTOMERITEMDESCRIPTION/>
<INVOICELINECOMMENT1/>
<INVOICELINECOMMENT2/>
<TRANSACTIONID/>
<CUSTOMERCOSTCENTER/>
<CUSTOMERITEMNUMBER/>
<CUSTOMERORDERLINENUMBER/>
<ORDEREDQTY>1</ORDEREDQTY>
<SHIPPEDQTY>1</SHIPPEDQTY>
</G_LINES>
</LIST_G_LINES>
Мой вывод должен выглядеть примерно так:
<H>
<tax rate 20>
<tax amount 102.60>
</H>
<H>
<tax rate 7>
<tax amount 21.50>
</H>
<H>
<tax rate 19>
<tax amount 13.28>
</H>
Мой xslt:
<xsl:variable name="vTaxRateCount" select="count(distinct-values(LIST_G_LINES/G_LINES/TAXRATE))"/>
<xsl:variable name="vDistinct">
<xsl:for-each select="fn:distinct-values(LIST_G_LINES/G_LINES/TAXRATE)">
<xsl:element name="Values">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="vPath" select="LIST_G_LINES/G_LINES/TAXAMOUNT"/>
<xsl:for-each select="$vDistinct/Values">
<xsl:variable name="vUniqueVal" select="."/>
<xsl:for-each select="LIST_G_LINES/G_LINES/TAXRATE=.">
<xsl:element name="TaxAmount">
<xsl:value-of select="sum($vPath[@TAXRATE = $vUniqueVal])"/>
<xsl:value-of select="$vUniqueVal"/>
</xsl:element>
</xsl:for-each>
</xsl:for-each>
Этот код не работает.Не могли бы вы помочь.