Subject: RE: [xsl] Problems incrementing a variable in a <xsl:for-each> From: "Richard Lander" <rlander@xxxxxxxxxxxxx> Date: Wed, 23 Oct 2002 07:32:03 -0700 |
Morning, XSLT is somewhat difficult to adopt given that many programming idioms don't apply. You've run into this problem with attempting to increment a variable in the way you might in C# or Java. The trick in XSLT is to do things a little differently. You cannot do what you are doing for two reasons: - variables only exist within the scope that they are declared - variables (and params) are immutable First, you have to ask yourself the question of why you are incrementing a variable. It looks like you want to determine the number of clients in your file. You can do that via the count function. Try modifying your transform in the following way: <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' <http://www.w3.org/1999/XSL/Transform'> > <xsl:output method='text'/> <xsl:variable name="counter" select="0"/> <xsl:template match='CLIENTS'> <xsl:value-of select="count(CLIENT)"/> </xsl:template> </xsl:stylesheet> Thanks, Rich -----Original Message----- From: Carlos Barroso [mailto:est-c-barroso@xxxxxxxxxxxxx] Sent: Wed 23/10/2002 6:42 AM To: XSL-List-Digest@xxxxxxxxxxxxxxxxxxxxxx Cc: Subject: [xsl] Problems incrementing a variable in a <xsl:for-each> 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 XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Problems incrementing a v, Vasu Chakkera | Thread | Re: [xsl] Problems incrementing a v, Joseph Kesselman |
[xsl] IE 5.5 - special characters, shreekumar_veeramani | Date | Re: [xsl] Problems incrementing a v, David Carlisle |
Month |