Subject: Re: [xsl] Calculating cumulative values - another call for help From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx> Date: Wed, 29 Aug 2007 17:03:04 +0100 |
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[@x = current()/@x]/@y1)"/> </xsl:attribute> <xsl:attribute name="y3"> <xsl:value-of select="sum((@y1, preceding-sibling::point[@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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Calculating cumulative va, Simon Shutter | Thread | RE: [xsl] Calculating cumulative va, Simon Shutter |
RE: [xsl] Calculating cumulative va, Simon Shutter | Date | Re: [xsl] Calculating cumulative va, Andrew Welch |
Month |