Nic Miloslav     Example 77    KEYWORDS      EXAMPLES      AUTHORS     

While XSLT does not define while and for loops, their behavior can be simulated. Stylesheet 1 simulates for and Stylesheet 2 while behavior.


     XML     HOME     XSL 1     XSL 2      
<xslTutorial >
<AAA repeat="3"/>
<BBB repeat="2"/>
<CCC repeat="5"/>
</xslTutorial>

     XSL 1     HOME     XML     HTML 1     OUTPUT 1     
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="/xslTutorial/*">
<p>
<xsl:call-template name="for">
<xsl:with-param name="stop">
<xsl:value-of select="@repeat"/>
</xsl:with-param>
</xsl:call-template>
</p>
</xsl:template>
<xsl:template name="for">
<xsl:param name="start">1</xsl:param>
<xsl:param name="stop">1</xsl:param>
<xsl:param name="step">1</xsl:param>
<xsl:value-of select="name()"/>
<xsl:text> </xsl:text>
<xsl:if test="$start &lt; $stop">
<xsl:call-template name="for">
<xsl:with-param name="stop">
<xsl:value-of select="$stop"/>
</xsl:with-param>
<xsl:with-param name="start">
<xsl:value-of select="$start + $step"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

     HTML 1     HOME     XML     XSL 1     OUTPUT 1     
<p>AAA AAA AAA </p>
<p>BBB BBB </p>
<p>CCC CCC CCC CCC CCC </p>

     OUTPUT 1     HOME     XML     XSL 1     HTML 1     

AAA AAA AAA

BBB BBB

CCC CCC CCC CCC CCC


     XSL 2     HOME     XML     HTML 2     OUTPUT 2     
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="/xslTutorial/*">
<p>
<xsl:call-template name="while">
<xsl:with-param name="test">
<xsl:value-of select="@repeat"/>
</xsl:with-param>
</xsl:call-template>
</p>
</xsl:template>
<xsl:template name="while">
<xsl:param name="test"/>
<xsl:value-of select="name()"/>
<xsl:text> </xsl:text>
<xsl:if test="not($test = 1)">
<xsl:call-template name="while">
<xsl:with-param name="test">
<xsl:value-of select="$test - 1"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

     HTML 2     HOME     XML     XSL 2     OUTPUT 2     
<p>AAA AAA AAA </p>
<p>BBB BBB </p>
<p>CCC CCC CCC CCC CCC </p>

     OUTPUT 2     HOME     XML     XSL 2     HTML 2     

AAA AAA AAA

BBB BBB

CCC CCC CCC CCC CCC