Andrew,
Thank you very much - I look forward to trying this out.
Simon
-----Original Message-----
From: Andrew Welch [mailto:andrew(_dot_)j(_dot_)welch(_at_)gmail(_dot_)com]
Sent: August 29, 2007 9:03 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Calculating cumulative values - another call for help
Here's my attempt that uses a key and does it in one pass:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:key name="point-by-set-id-and-x" match="point"
use="concat(parent::set/@id,'-',@x)"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="point">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:attribute name="y2">
<xsl:value-of select="sum(@y1|preceding-sibling::point[(_at_)x =
current()/@x]/@y1)"/>
</xsl:attribute>
<xsl:attribute name="y3">
<xsl:value-of select="sum((@y1, preceding-sibling::point[(_at_)x
=
current()/@x]/@y1)) + sum(for $x in 1 to xs:integer(parent::set/@id - 1)
return key('point-by-set-id-and-x',
concat($x, '-', current()/@x))/@y1)"/>
</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
It could be re-written in pure 1.0 if you replaced the "for $x in to
xs:integer(parent::set/@id - 1)" with a recursive named template... if you
could be bothered :)
cheers
andrew
--
http://andrewjwelch.com
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--