Previous | Next | Indexes
Zvon > Tutorials > XSLT 2.0 Tutorial > Recursions (1/6) >

Recursion

Recursion is a programming technique in which a function calls itself. And it is a very powerful technique especially in the world of markup structures. Obviously if a function calls itself it may never terminate therefore it is very important to have some terminating condition inside the function (often called "base case").

In this example the template "xxx" is instantiated with the value of parameter "i" set to 1, recursive calls to this function increase the value of this parameter by 1 and when the parameter reaches value 5 the processing is terminated.

XSLT

      <xsl:stylesheet
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                  version="2.0">
            <xsl:output  method="xml"
                        indent="yes"
                        omit-xml-declaration="yes"/>

            <xsl:template  match="/*">
                  <xsl:call-template  name="xxx"/>
            </xsl:template>

            <xsl:template  name="xxx">
                  <xsl:param  name="i"
                              select="1"/>
                  <xsl:choose>
                        <xsl:when  test="$i=5">
                              <end/>
                        </xsl:when>
                        <xsl:otherwise>
                              <step>
                                    <xsl:value-of  select="$i"/>
                              </step>
                              <xsl:call-template  name="xxx">
                                    <xsl:with-param  name="i"
                                                select="$i+1"/>
                              </xsl:call-template>
                        </xsl:otherwise>
                  </xsl:choose>
            </xsl:template>

      </xsl:stylesheet>
XML

      <aaa/>
Output

      <step>1</step>
      <step>2</step>
      <step>3</step>
      <step>4</step>
      <end/>


Previous chapter: Keys
Next chapter: Date and Time
Previous page: - - -
Next page: Recursive xsl:apply-templates