Re: [xsl] Increment a Value in xsl:for-each

Subject: Re: [xsl] Increment a Value in xsl:for-each
From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx>
Date: Thu, 8 Mar 2001 22:06:04 +0000
Hi Raj,

> In xsl:for-each I have to read first Address and First City for the
> first time, Second Address and second City second time and so on.
>
> My XSL template is
>
> <xsl:variable name="iCount" select="1"/>
>
> <xsl:for-each select="Address">
>     <xsl:value-of select="Address"/>
>     <xsl:value-of select=../City[position()=$iCount"/>
> </xsl:for-each>
>
> I have to increment iCount in for loop.
>
> Can you please tell me how can I increment iCount in for-each loop.

XSLT doesn't allow you to increment variables.  There are usually
other ways to do what you need to do, and there is in this case.

Use xsl:for-each to iterate over the Address elements and then use the
position() of the Address to index into the City elements:

  <xsl:for-each select="Address">
     <xsl:variable name="iCount" select="position()" />
     <xsl:value-of select="." />
     <xsl:value-of select="../City[$iCount]" />
  </xsl:for-each>

Two things to note here: first, the Address element that you're
looking at within the xsl:for-each is the current node within the
xsl:for-each.  In your xsl:for-each, you're getting the value of the
child Address element of the current Address element - I don't
think you have nested Address elements, so I don't think that's what
you wanted.

The other thing to note is that $iCount is a number, so there's no
need to test whether the position() of the node equals it - you can
just put the number as the value of the predicate and the nodes will
automatically be filtered by position().

I hope that helps,

Jeni

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



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


Current Thread