This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Summing computed values
- To: "'xsl-list at lists dot mulberrytech dot com'" <xsl-list at lists dot mulberrytech dot com>
- Subject: Re: [xsl] Summing computed values
- From: Jeni Tennison <mail at jenitennison dot com>
- Date: Wed, 10 Jan 2001 18:33:28 +0000
- CC: Lorenzo De Sio <l dot desio at w4b dot it>
- Organization: Jeni Tennison Consulting Ltd
- References: <9008AF5250E3D411AE57009027CA88E30FCE88@WWMESSD048>
- Reply-To: xsl-list at lists dot mulberrytech dot com
Mike Kay wrote:
>> Is anyone able to figure a way to sum computed values?
>
> In standard XSLT, it needs a recursive template. See the example on
> page 502 of my XSLT Programmer's Reference.
In XSLT 1.1, you can do it by creating a node set with the calculated
values in it, and then summing that:
<xsl:variable name="subtotals">
<xsl:for-each select="item">
<subtotal><xsl:value-of select="price * qty" /></subtotal>
</xsl:for-each>
</xsl:variable>
Total: <xsl:value-of select="sum($subtotals/subtotal)" />
You can do this now using the node-set extension function in most XSLT
processors. For example in MSXML you can do:
<xsl:variable name="subtotals">
<xsl:for-each select="item">
<subtotal><xsl:value-of select="price * qty" /></subtotal>
</xsl:for-each>
</xsl:variable>
Total: <xsl:value-of select="sum(msxsl:node-set($subtotals)/subtotal)" />
Both of these methods require you to run through the entire set of
items twice, but they won't respond too terribly when you add lots
more items and they're possibly a little easier to grasp than a
recursive template.
I hope that helps,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list