Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>What you should do is use an identity transform and then just override the <code>Totals</code> element. </p> <p><strong>EDIT: Based on a comment by the OP in @james.garriss answer, I modified the calculation to just sum everything.</strong></p> <p><strong>Input XML</strong></p> <pre><code>&lt;Report Name="SalesInvoice"&gt; &lt;ReportName&gt;SalesInvoice&lt;/ReportName&gt; &lt;Invoice&gt; &lt;InvoicingName&gt;Test Company&lt;/InvoicingName&gt; &lt;/Invoice&gt; &lt;ConditionalArea&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;110&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;1.52&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;198&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;20.11&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;198&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;20.22&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;992&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;30.33&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;993&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;30.34&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;992&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;30.35&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;992&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;30.45&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;993&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;30.46&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;198&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;100.99&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;/ConditionalArea&gt; &lt;Totals&gt; &lt;/Totals&gt; &lt;/Report&gt; </code></pre> <p><strong>XSLT Stylesheet</strong></p> <pre><code>&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt; &lt;xsl:output indent="yes"/&gt; &lt;xsl:strip-space elements="*"/&gt; &lt;xsl:key name="KType" match="Basisproduct" use="."/&gt; &lt;xsl:template match="node()|@*"&gt; &lt;xsl:copy&gt; &lt;xsl:apply-templates select="node()|@*"/&gt; &lt;/xsl:copy&gt; &lt;/xsl:template&gt; &lt;xsl:template match="Totals"&gt; &lt;Totals&gt; &lt;xsl:for-each select="/*/*/*/Basisproduct [generate-id() = generate-id(key ('KType', .)[1])]"&gt; &lt;xsl:variable name="currProd" select="."/&gt; &lt;Totalproduct&gt; &lt;xsl:copy-of select="."/&gt; &lt;Cumul_Amount&gt; &lt;!--&lt;xsl:value-of select= "/*/*/*[Basisproduct = current()][last()]/CustInvoice_LineAmount + sum(/*/*/*[Basisproduct = current()][last()]/preceding-sibling::*/CustInvoice_LineAmount)"/&gt;--&gt; &lt;xsl:value-of select="sum(/*/*/BodyCustInvoice[Basisproduct=$currProd]/CustInvoice_LineAmount)"/&gt; &lt;/Cumul_Amount&gt; &lt;/Totalproduct&gt; &lt;/xsl:for-each&gt; &lt;/Totals&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; </code></pre> <p><strong>Output XML</strong> (Using Xalan :-( )</p> <pre><code>&lt;Report Name="SalesInvoice"&gt; &lt;ReportName&gt;SalesInvoice&lt;/ReportName&gt; &lt;Invoice&gt; &lt;InvoicingName&gt;Test Company&lt;/InvoicingName&gt; &lt;/Invoice&gt; &lt;ConditionalArea&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;110&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;1.52&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;198&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;20.11&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;198&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;20.22&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;992&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;30.33&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;993&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;30.34&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;992&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;30.35&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;992&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;30.45&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;993&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;30.46&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;BodyCustInvoice&gt; &lt;Basisproduct&gt;198&lt;/Basisproduct&gt; &lt;CustInvoice_LineAmount&gt;100.99&lt;/CustInvoice_LineAmount&gt; &lt;/BodyCustInvoice&gt; &lt;/ConditionalArea&gt; &lt;Totals&gt; &lt;Totalproduct&gt; &lt;Basisproduct&gt;110&lt;/Basisproduct&gt; &lt;Cumul_Amount&gt;1.52&lt;/Cumul_Amount&gt; &lt;/Totalproduct&gt; &lt;Totalproduct&gt; &lt;Basisproduct&gt;198&lt;/Basisproduct&gt; &lt;Cumul_Amount&gt;141.32&lt;/Cumul_Amount&gt; &lt;/Totalproduct&gt; &lt;Totalproduct&gt; &lt;Basisproduct&gt;992&lt;/Basisproduct&gt; &lt;Cumul_Amount&gt;91.13&lt;/Cumul_Amount&gt; &lt;/Totalproduct&gt; &lt;Totalproduct&gt; &lt;Basisproduct&gt;993&lt;/Basisproduct&gt; &lt;Cumul_Amount&gt;60.8&lt;/Cumul_Amount&gt; &lt;/Totalproduct&gt; &lt;/Totals&gt; &lt;/Report&gt; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload