[xsl] Problems incrementing a variable in a <xsl:for-each>

Subject: [xsl] Problems incrementing a variable in a <xsl:for-each>
From: Carlos Barroso <est-c-barroso@xxxxxxxxxxxxx>
Date: Wed, 23 Oct 2002 14:42:19 +0100
Hy there.
I'm having problems incrementing a variable in a <xsl:for-each> section.
Below is the XML document, the stylesheet I used and the output I got.

-----------------------
XML file
-----------------------

<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE CLIENTS SYSTEM 'counter.dtd'>

<CLIENTS>
  <CLIENT>
    <NAME value='xpto'/>
    <AGE value='10'/>
  </CLIENT>
  <CLIENT>
    <NAME valor='xxx'/>
    <AGE valor='20'/>
  </CLIENT>
</CLIENTS>

----------------------
First XSL file
----------------------

<?xml version='1.0' encoding='ISO-8859-1'?>

<xsl:stylesheet version='1.0' 
  xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='text'/>

<xsl:variable name="counter" select="0"/>
<xsl:template match='/CLIENTS'>  
  <xsl:for-each select="./CLIENT">
    <xsl:variable name="counter" select="1 + $counter"/>
    <xsl:value-of select="$counter"/>
  </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

-------------------------
Output in TXT file
-------------------------

11

-------------- // --------------

------------------------
Second XSL test
------------------------

<?xml version='1.0' encoding='ISO-8859-1'?>

<xsl:stylesheet version='1.0' 
  xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='text'/>

<xsl:variable name="counter" select="0"/>
<xsl:template match='/CLIENTS'>  
    <xsl:variable name="counter" select="1 + $counter"/>
    <xsl:value-of select="$counter"/>
    <xsl:variable name="counter" select="1 + $counter"/>
    <xsl:value-of select="$counter"/>
</xsl:template>
</xsl:stylesheet>

-------------------------
Output in TXT file
-------------------------

12

-------------- // --------------

In the second XSL file, the counter procedes as planned. But in the first
XSL the counter mantains
it's value!? I tried using templates instead of "<xsl:for-each>" but it
gives me the same results!
I don't know what's wrong.
Can someone help me please. This is very weird to me.
Thanks a lot.


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


Current Thread