[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Counting elements with count() and position()


Subject: Re: [xsl] Counting elements with count() and position()
From: "Rudi Starcevic" <rudi@xxxxxxxxxxxx>
Date: Thu, 10 Jul 2003 23:40:05 +1000

Thanks Jeni,

That reply was much more than I had hoped for.

One problem - 4 solutions.

I do get a buzz working at home through your 'StarTrek' counting examples
in Begining XSLT then posting a question and getting a reply 10 mins.
later from the author herself.

I look forward to completing this book and moving onto the one beside it
'XSLT and XPATH On The Edge'.

Many thanks,
Best regards
Rudi.


> 
> You need to do one of the following:
> 
> 1. Use the last() function in your address template to give you the
> count of the number of nodes "currently being processed". Since all
> the nodes are <address> elements, this will give you the count that
> you need:
> 
> <xsl:template match="address">
>   <tr>
>     <xsl:choose>
>       <xsl:when test="position() = 1">
>         <td class="title">
>           <xsl:choose>
>             <xsl:when test="last() > 1">urls:</xsl:when>
>             <xsl:otherwise>url:</xsl:otherwise>
>           </xsl:choose>
>         </td>
>       </xsl:when>
>       ...
>     </xsl:choose>
>     ...
>   </tr>
> </xsl:template>
> 
> 2. Make the variable global, so that it's in-scope everywhere. At the
> top level of the stylesheet, add:
> 
> <xsl:variable name="addresscount"
>               select="count(/webapps/website/address)" />
> 
> 3. Calculate the value for the variable within the address template:
> 
> <xsl:template match="address">
>   <xsl:variable name="addresscount" select="count(../address)" />
>   ...
> </xsl:template>
> 
> 4. Pass the value of $addresscount as a parameter into the address
> template. The address template needs to declare the parameter:
> 
> <xsl:template match="address">
>   <xsl:param name="addresscount" />
>   ...
> </xsl:template>
> 
> and you need to pass it when you apply templates to the <address>
> elements:
> 
>   <xsl:apply-templates select="address">
>     <xsl:with-param name="addresscount" select="$addresscount" />
>   </xsl:apply-templates>
> 
> Cheers,
> 
> Jeni
> 
> ---
> Jeni Tennison
> http://www.jenitennison.com/




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



Current Thread
Keywords