Increment a value in XSLT
variables, xslt
Solution
XSLT is a functional language and among other things this means that variables in XSLT are immutable and once they have been defined their value cannot be changed.
Here is how the same effect can be achieved in XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<posts>
<xsl:for-each select="data/posts/entry">
<xsl:variable name="i" select="position()" />
<xsl:copy>
<xsl:value-of select="concat('$i = ', $i)"/>
</xsl:copy>
</xsl:for-each>
</posts>
</xsl:template>
</xsl:stylesheet>
when this transformation is applied on the following XML document:
<data>
<posts>
<entry/>
<entry/>
<entry/>
<entry/>
<entry/>
</posts>
</data>
the result is:
<posts>
<entry>$i = 1</entry>
<entry>$i = 2</entry>
<entry>$i = 3</entry>
<entry>$i = 4</entry>
<entry>$i = 5</entry>
</posts>
Problem
I'm reasonably new to xlst and am confused as to whether there is any way to store a value and change it later, for example incrementing a variable in a loop. I'm a bit baffled by not being able to change the value of a after it's set doesn't make sense to me, making it more of a constant. For example I want to do something like this: ``` <xsl:variable name="i" select="0" /> <xsl:for-each select="data/posts/entry"> <xsl:variable name="i" select="$i + 1" /> <!-- DO SOMETHING --> </xsl:for-each> ``` If anyone can enlighten me on whether there is an alternative way to do this Thanks