xsl-list
[Top] [All Lists]

RE: Increment value by group?

2006-01-20 14:00:21
It looks to me as if the processing of each group is independent of the
processing of any other group (because the running total starts at 1 for
each group) and therefore you can use for-each-group to split the data into
groups. But within each group, the processing of each item depends on the
results of processing previous items, so it can't be done with a simple
for-each - it needs recursion.

So the structure you want is along the lines 

for-each-group select="job" group-adjacent="quantity"
  call-template name="recurse"
   with-param name="group" select="current-group()"
   with-param name="running-total" select="0"
  /call-template
/for-each-group

where the recursive named template processes the first element in the group,
and then calls itself to process the remainder of the group, passing an
incremented running-total as the parameter.

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

-----Original Message-----
From: watchstone(_at_)netzero(_dot_)com 
[mailto:watchstone(_at_)netzero(_dot_)com] 
Sent: 20 January 2006 19:12
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Increment value by group?

Hello:  I want to process nodes based on grouping by 
<quantity>. The  <increment> element is used as a running 
"total" based on grouping.  So basically, when <quantity> is 
"1", I want to process all of them as a group and use the 
<increment> value to produce an output like this:

1/1-3 (i.e. <increment> value was "3")
1/4-5 (i.e. <increment> value was "2" but starts where
preceding value left off)

When <quantity> changes, I want the <increment> value to also 
start over with "1".

Can I use <xsl:for-each-group> or some such element to 
accomplish this?  Thanks for any tips.  I'm stumped!
 
<?xml version="1.0"?>
<document>
<job>
<quantity>1</quantity>
<increment>3</increment>
</job>
<job>
<quantity>1</quantity>
<increment>2</increment>
</job>
<job>
<quantity>2</quantity>
<increment>4</increment>
</job>
<job>
<quantity>2</quantity>
<increment>1</increment>
</job>
</document>
 
Desired output:
<document>
<job>
<status>1/1-3</status>
</job>
<job>
<status>1/4-5</status>
</job>
<job>
<status>2/1-4</status>
</job>
<job>
<status>2/5</status>
</job>



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>