RE: [xsl] Keeping a running total?

Subject: RE: [xsl] Keeping a running total?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 10 Jul 2006 18:21:51 +0100
You're out of luck with for-each, because conceptually at least it processes
all the factories in parallel. So you can't accumulate data as you go.
Instead for this kind of problem you need recursion: to a process a list of
factories, process the first factory, then process the rest of the factories
by a recursive call, passing any necessary data (such as your "running
total") as a parameter.

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Steve [mailto:subsume@xxxxxxxxx] 
> Sent: 10 July 2006 18:12
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Keeping a running total?
> 
> Problem:  I need to make a table of the output required of 4 
> factories next month.
> 
>                   Widgets    Gadgets
> Factory A     2
> Factory B     3
> Factory C                       4
> Factory D                       1
> 
> Widget quota = 5
> Gadget quota = 5
> 
> ---
> 
> My current xsl looks something like.
> 
> <xsl:for-each select="document('factories.xml')//factory">
>        <xsl:variable name="widgets">
>              Has quota been reached? Then return 0.
>              Otherwise, give as many possible without going 
> over the quota.
>        </xsl:variable>
>        <xsl:variable name="gadgets">
>               Has the widget quota been filled?
>               Then start making gadgets!
>                Has this quota been reached? (etc).
>        </xsl:variable>
> 	<tr>
> 		<td><xsl:value-of select="@name" /></td>
> 		<td><xsl:value-of select="$widgets" /></td>
> 		<td><xsl:value-of select="$gadgets" /></td>
> 	</tr>
> </xsl:for-each>
> 
> **Lines which I can't describe in XSL have been translated to 
> English 3.1b
> 
> ----------
> 
> When the quota of Widgets has been reached, I need the 
> factories to start making Gadgets. In the above example the 
> quota is reached at factory B and factory C begins making Gadgets.
> 
> Howto?
> 
> -Steve
> 
> PS: For now I am using a for-each (factory) to iterate 
> through the totals and generate numbers. It seems that 
> templates are beneficial for things such as this, but I have 
> not yet mastered their use and so if this can be more easily 
> done with templates, I'd like to know how.

Current Thread