RE: [xsl] Incrementing a variable in XSL

Subject: RE: [xsl] Incrementing a variable in XSL
From: "Roger Glover" <glover_roger@xxxxxxxxx>
Date: Thu, 16 Jan 2003 01:04:50 -0600
Before the flood starts, I just saw my mistake. :-(

I wrote the tail recursion expression incorrectly...
    "following-sibling::a"
        should be
    "following-sibling::a[1]"

-- Roger Glover

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Roger Glover
> Sent: Thursday, January 16, 2003 12:51 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] Incrementing a variable in XSL
>
>
> Ken Ross wrote:
> > In short you can't.
> >
> > You can simulate it by using <xsl:value-of
> > select="count(preceding::a)+1"/>.
>
> Wouldn't something like this (admittedly ad hoc, untested code) work too?
>
>     <xsl:template match="docroot">
>         <xsl:variable name="var">1</xsl:variable>
>         <xsl:apply-templates select="a[1]" mode="tailRecurseSibs"/>
>     </xsl:template>
>
>     <xsl:template match="a" mode="tailRecurseSibs">
>         <xsl:param name="var" select="1"/>
>         <xsl:value-of select="$var"/>
>         <xsl:apply-templates select="following-sibling::a"
> mode="tailRecurseSibs">
>             <xsl:with-param name="var" select="$var + 1"/>
>         </xsl:apply-templates>
>     </xsl:template>
>
> In other words, while direct iteration using a variable will not allow the
> desired operation, tail recursion using a parameter should.  Right?
>
> -- Roger Glover
>    glover_roger@xxxxxxxxx
>
>
> > -----Original Message-----
> > From: Mukul [mailto:mukulw3@xxxxxxxxx]
> > Sent: Thursday, 16 January 2003 3:37 PM
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: [xsl] Incrementing a variable in XSL
> >
> >
> > Hello ,
> > I have a simple XML file as below:
> > <?xml version="1.0" encoding="UTF-8"?>
> > <docroot>
> >   <a>1</a>
> >   <a>2</a>
> >   <a>3</a>
> >   <a>4</a>
> > </docroot>
> >
> > I have written a XSL stylesheet as below:
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xsl:stylesheet version="1.0"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> >
> > <xsl:template match="docroot">
> >     <xsl:variable name="var">1</xsl:variable>
> >     <xsl:for-each select="a">
> >        <xsl:value-of select="$var"/>
> >        <!-- incrementing $var ?? -->
> >     </xsl:for-each>
> > </xsl:template>
> > </xsl:stylesheet>
> >
> > I want to increment a variable in <xsl:for-each ..,
> > and print it with <xsl:value-of ..
> >
> > There is a situation where in the XML file, a tag
> > repeats and I want to output the no's 1, 2, 3 etc in
> > the output with each tag instance.
> >
> > How can I do this?
> >
> > Regards,
> > Mukul
>
>
>  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