Using FXSL one would simply write:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:foldl-func="foldl-func"
exclude-result-prefixes="foldl-func"
<xsl:import href="foldl.xsl"/>
<!-- This transformation must be applied to:
numList.xml
-->
<xsl:variable name="vFoldrFun" select="document('')/*/foldl-func:*[1]"/>
<xsl:output encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:call-template name="foldl">
<xsl:with-param name="pFunc" select="$vFoldrFun"/>
<xsl:with-param name="pList" select="/*/RECEIPT"/>
<xsl:with-param name="pA0" select="0"/>
</xsl:call-template>
</xsl:template>
<foldl-func:foldl-func/>
<xsl:template match="foldl-func:*">
<xsl:param name="arg1" select="0"/>
<xsl:param name="arg2" select="0"/>
<xsl:value-of select="$arg1 + $arg2/qtyRcpt * $arg2/line/pr"/>
</xsl:template>
</xsl:stylesheet>
When this transformation is applied on your source.xml:
<BATCH>
<RECEIPT>
<qtyRcpt>1</qtyRcpt>
<line>
<pr>102.00</pr>
</line>
</RECEIPT>
<RECEIPT>
<qtyRcpt>3</qtyRcpt>
<line>
<pr>20.00</pr>
</line>
</RECEIPT>
</BATCH>
the wanted result is produced:
162
Cheers,
Dimitre Novatchev.
FXSL developer,
http://fxsl.sourceforge.net/ -- the home of FXSL
Resume: http://fxsl.sf.net/DNovatchev/Resume/Res.html
"Charles Gebhard" <cgebhard(_at_)pointsystems(_dot_)com> wrote in message
news:40187C7E(_dot_)5080706(_at_)pointsystems(_dot_)com(_dot_)(_dot_)(_dot_)
greetings all,
i'm a newbie and am trying to get a sum of a calculation; i'm hoping to
get the value "162.00".
<BATCH>
<RECEIPT>
<qtyRcpt>1</qtyRcpt>
<line>
<pr>102.00</pr>
</line>
</RECEIPT>
<RECEIPT>
<qtyRcpt>3</qtyRcpt>
<line>
<pr>20.00</pr>
</line>
</RECEIPT>
</BATCH>
i've seen this FAQ:
http://www.dpawson.co.uk/xsl/sect2/N5121.html#d5351e202
but without the sample xml, i can't really understand it.
i've also seen posts that use the "node-set()" function. but i'm not
able to successfully get the exslt stuff to work.
<xsl:template match="BATCH">
<xsl:variable name="tmpTotal">
<xsl:for-each select="RECEIPT">
<item>
<xsl:value-of select="( qtyRcpt * line/pr )"/>
</item>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="myTotal" select="exslt:node-set($tmpTotal)"/>
<xsl:value-of select="sum($myTotal/item)" />
</xsl:template>
so, i'd really like to be able to do this in native XSLT 1.0 (without
node-set). could someone please point me in the right direction? seems
like it would be really simple. i've been pounding my head for hours.
thanks.
-charles
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list