Subject: RE: 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: 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.
|