This week's book giveaway is in the OCPJP forum. We're giving away four copies of OCA/OCP Java SE 7 Programmer I & II Study Guide and have Kathy Sierra & Bert Bates on-line! See this thread for details.
Can I get a count of how many times a particular template is being called? Im thinking of something like - <xsl:variable name="globalVar" select"1" /> <xsl:template match="Node1"> <xsl:for-each select="$Values"> <xsl:call-template name="T1"/> </xsl:for-each> </xsl:template> <xsl:template name="T1"> <xsl:if test="ValueIsValid"> <xsl:call-template name="T2"/> </xsl:if> </xsl:template> <xsl:template match="T2"> Called for <xsl:value-of select="$globalVar" /> <!-- Increament the var??? --> </xsl:template> The final template creates the output. I showed this for what I want. I know we cannot reassign variables in xsl. As I am iterating over $Values, that is a variable, I am getting undesired result by using xsl:number or position(). Can anyone give any hints? Thanks
Alongwith being a good coder, try to be a good professional as well!
Tina, you can use position() function inside for-each element even if you iterate over a variable. This is probably the easiest way to do what you want. I do not think any trick with counting inside called template will work... Templates are functions, and functions in XSLT are free from side-effects, they do not keep state. You could accumulate this number in calling template and pass it as a parameter, using <xsl:variable name="someVar" select="$someVar + 1"/> trick, but here you aren't update a variable, you create a new one using old value. It won't work with if element, because of scope limitations. To make position() function work looks more prominent.