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(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of
Roger Glover
Sent: Thursday, January 16, 2003 12:51 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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(_at_)yahoo(_dot_)com
-----Original Message-----
From: Mukul [mailto:mukulw3(_at_)yahoo(_dot_)com]
Sent: Thursday, 16 January 2003 3:37 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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