XLST sum

Being hired to work on an extensive, complex and most of all, very used system, I naturally have to jump between different sides of the system. Having added some features to an application I then got back to XSLT.

One of the things I had to do was to generate a sum. Now, I could have done this in Lansa, but it was more logically done in XSLT so I did that. Except, since I could not remember the exact syntax I did a search and found many convoluted examples. And it is actually quite easy:

<xsl:value-of select="sum(XPATH)" />

Specifically I used it in this context:

<xsl:template match="/lxml:data/lxml:lists/lxml:list[@name='ESTLIST']">
<xsl:variable name="thelist"
 select="/lxml:data/lxml:lists/lxml:list[@name='ESTLIST']" />
...
<xsl:for-each select="$thelist/lxml:list-entries/lxml:entry">
 <xsl:variable name="BUTNR" select="lxml:column[@name='X_BUTNR']" />
 <xsl:variable name="BUKORT" select="lxml:column[@name='X_BUKORT']" />
 <xsl:variable name="EANTAL" select="lxml:column[@name='X_EANTAL']" /
...
</xsl:for-each>
...
<xsl:value-of select="sum($thelist/lxml:list-entries/lxml:entry/lxml:column[@name='X_EANTAL'])" />
...
</xsl:template>

The XML source was essentially

<?xml version="1.0"?>
 <lxml:data xmlns:lxml="http://www.lansa.com/2002/XML/Runtime-Data">
 <lxml:lists>
 <lxml:list name="ESTLIST" row-count="3">
 <lxml:list-header>
 <lxml:header name="X_BUTNR">...</lxml:header>
 <lxml:header name="X_BUKORT">...</lxml:header>
 <lxml:header name="X_EANTAL">...</lxml:header>
 </lxml:list-header>
 <lxml:list-entries>
 <lxml:entry>
 <lxml:column name="X_BUTNR" id="ESTLIST.0001.X_BUTNR">ABCD</lxml:column>
 <lxml:column name="X_BUKORT" id="ESTLIST.0001.X_BUKORT">aAbBcCdDeEfFgGh</lxml:column>
 <lxml:column name="X_EANTAL" id="ESTLIST.0001.X_EANTAL">12345</lxml:column>
 </lxml:entry>
 <lxml:entry>
 <lxml:column name="X_BUTNR" id="ESTLIST.0002.X_BUTNR">ABCD</lxml:column>
 <lxml:column name="X_BUKORT" id="ESTLIST.0002.X_BUKORT">aAbBcCdDeEfFgGh</lxml:column>
 <lxml:column name="X_EANTAL" id="ESTLIST.0002.X_EANTAL">12345</lxml:column>
 </lxml:entry>
 <lxml:entry>
 <lxml:column name="X_BUTNR" id="ESTLIST.0003.X_BUTNR">ABCD</lxml:column>
 <lxml:column name="X_BUKORT" id="ESTLIST.0003.X_BUKORT">aAbBcCdDeEfFgGh</lxml:column>
 <lxml:column name="X_EANTAL" id="ESTLIST.0003.X_EANTAL">12345</lxml:column>
 </lxml:entry>
 </lxml:list-entries>
 </lxml:list>
 </lxml:lists>
 </lxml:data>

Leave a comment