Subject: RE: [xsl] Calculating min/max values for sum of different node va lues From: bryan.s.schnabel@xxxxxxxxxxxxxx Date: Wed, 21 May 2003 16:42:52 -0700 |
I got a bit lost when it came down to what you wanted in the end. But you could try a brute force approach. <xsl:template match="graph"> <sets> <a set="{$startYear}"> <xsl:for-each select="year[$startYear=@value]/return[(@month > ($startMonth - 1)) and (@month < ($endtMonth + 1))]"> <xsl:sort /> <xsl:if test="position()=1"> <min> <xsl:value-of select="." /> </min> </xsl:if> <xsl:if test="position()=last()"> <max> <xsl:value-of select="." /> </max> </xsl:if> </xsl:for-each> <xsl:for-each select="year[$startYear=@value]"> <sum> <xsl:value-of select="sum(return[(@month > ($startMonth - 1)) and (@month < ($endtMonth + 1))])" /> </sum> </xsl:for-each> </a> <b set="{$endYear}"> <xsl:for-each select="year[$endYear=@value]/return[(@month > ($startMonth - 1)) and (@month < ($endtMonth + 1))]"> <xsl:sort /> <xsl:if test="position()=1"> <min> <xsl:value-of select="." /> </min> </xsl:if> <xsl:if test="position()=last()"> <max> <xsl:value-of select="." /> </max> </xsl:if> </xsl:for-each> <xsl:for-each select="year[$endYear=@value]"> <sum> <xsl:value-of select="sum(return[(@month > ($startMonth - 1)) and (@month < ($endtMonth + 1))])" /> </sum> </xsl:for-each> </b> </sets> </xsl:template> Which results in: <sets> <a set="2001"> <min>1</min> <max>2.5</max> <sum>6.7</sum> </a> <b set="2002"> <min>1</min> <max>2.5</max> <sum>6.5</sum> </b> </sets> -----Original Message----- From: Bogdan Constantinescu [mailto:bconstantinescu@xxxxxxxxxxxxxx] Sent: Wednesday, May 21, 2003 9:35 AM To: XSL-List (E-mail) Subject: [xsl] Calculating min/max values for sum of different node values Hi, Here is a sample of the xml file that I am using: <graph> <year value="2000"> <return month="1">1</return> <return month="2">-2.5</return> <return month="3">2</return> <return month="4">3</return> <return month="5">4</return> <return month="6">2</return> <return month="7">-1</return> <return month="8">0</return> <return month="9">1</return> <return month="10">9</return> <return month="11">5</return> <return month="12">0</return> </year> <year value="2001"> <return month="1">0</return> <return month="2">1</return> <return month="3">2.2</return> <return month="4">1</return> <return month="5">2.5</return> <return month="6">1</return> <return month="7">3</return> <return month="8">2</return> <return month="9">1</return> <return month="10">6</return> <return month="11">2.1</return> <return month="12">1</return> </year> <year value="2002"> <return month="1">0</return> <return month="2">1</return> <return month="3">2</return> <return month="4">1</return> <return month="5">2.5</return> <return month="6">1.5</return> <return month="7">-3</return> <return month="8">2</return> <return month="9">1</return> <return month="10">6</return> <return month="11">2.1</return> <return month="12">1</return> </year> </graph> What I want to do is the following: I will have 4 variables defined in the XSL: <xsl:variable name="startYear">2001</xsl:variable> <xsl:variable name="endYear">2002</xsl:variable> <xsl:variable name="startMonth">2</xsl:variable> <xsl:variable name="endtMonth">5</xsl:variable> which will get each time different values from a configuration file. Let's use these hardcoded values for now. I want to calculate the min/max (and store the results in some variables for later use) for the sums of all the return values that are in the specified range. For example, in this case I want to sum all the return values from year 2001 that have the month attribute between 2 and 5, and then calculate the sum for all the return values from year 2002 that have the month attribute between 2 and 5 and in the end calculate the max/min of these 2 sums. Does anybody have any idea if I can do this in XSL ? Thanks a lot for your help ! Bogdan Constantinescu XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to split a relative l, Wolfgang Schreurs | Thread | [xsl] Processing an element only if, Dustin, Dave |
RE: [xsl] Divide in an expression?, David Carlisle | Date | [xsl] Processing an element only if, Dustin, Dave |
Month |