[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: My Difficult counting problem

Subject: Re: My Difficult counting problem
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Thu, 22 Aug 2002 23:07:35 +0100
Re:  My Difficult counting problem
Hi Tim,

> I need some help doing the following, I can't seem to figure out how to do
> this in XSL
>
> I need to convert something like this
> <myElement>
>    <foo name="foobar1"/>
>    <foo name="foobar2"/>
>    <foo name="foobar1"/>
>    <foo name="foobar3"/>
>    <foo name="foobar1"/>
>    <foo name="foobar1"/>
>    <foo name="foobar3"/>
> </myElement>
>
> and the output after running it through the XSL would be
>
> numberOccurrences[] = {1, 1, 2, 1, 3, 4, 2};
>
> basically for each foo with a duplicate name you put the occurrence
> number of it in the array at the correct position.
>
> You see that foobar1 occurs 4 times, 
> the 1st occurrence is at position 0, while 2nd occurrence is at position 2,
> 3rd at position 4, and 5th at position 5. etc.
>
> I don't know how loop through the nodes, and keep track of how many
> occurrences there are up to the given position.

It's easiest to loop through the nodes and when you're on each node
look back and count how many preceding sibling foo elements there are
with the same name, then add one to get the position of this one. Try:

<xsl:template match="myElement">
  numberOccurrences[] = {<xsl:apply-templates select="foo" />};
</xsl:template>

<xsl:template match="foo">
  <xsl:variable name="name" select="@name" />
  <xsl:value-of
    select="count(preceding-sibling::foo[@name = $name]) + 1" />
  <xsl:if test="position() != last()">, </xsl:if>
</xsl:template>

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.