Subject: [xsl] Recursive sums in xslt 1.0|
From: Daniel O'Donnell <daniel.odonnell@xxxxxxxx>
Date: Sun, 13 Mar 2005 11:20:01 -0700
in xslt1 if you want to store an expression that is going to be re-evaluated you need to put it in a named template. Then you could call that so long as you replaced sum(..) with a recursive template that iterated over the nodes calculating the sum and calling your named templates.
The context is a financial xslt file that outputs itemised monthly reports from an unitemised year-to-date xml file. For each item in the output file, I need to do two tests: one for date and the other for some other feature (usually party [i.e. payer/payee]). This would be an example with no parameters or variables:
<xsl:variable name="actualelectricity"> <xsl:value-of select="sum(/statement/item[date >= 20050228 and party[contains('DEML')]]/amount)"/> </xsl:variable>
What I want to do is turn the two expressions in the test into independent variables so that I could do something like this:
<xsl:variable name="actualelectricity"> <xsl:value-of select="sum(/statement/item[$datetest and $electricitytest]/amount)"/> </xsl:variable>
datetest = (date >= 20050228)
electricitytest = (party[contains('DEML')])
The reason for doing this is that it allows me to reuse the category tests (i.e. the party[contains()]-type tests) independently of the date tests: for year-to-date summaries, and for a miscellaneous class that consists of anything that is not identified by an explicit category test.
-- Daniel Paul O'Donnell, PhD Associate Professor of English University of Lethbridge Lethbridge AB T1K 3M4 Tel. (403) 329-2377 Fax. (403) 382-7191 E-mail <daniel.odonnell@xxxxxxxx> Home Page <http://people.uleth.ca/~daniel.odonnell/> The Digital Medievalist Project: <http://www.digitalmedievalist.org/>