Re: [xsl] Loops and variables question

Subject: Re: [xsl] Loops and variables question
From: Frederic Laurent <fl@xxxxxxxxxxxxx>
Date: Thu, 27 Nov 2003 13:01:19 +0100
Fran wrote:
> Hi,
> I want to build a list with the quantity attribute of the all ROOMS nodes.
> I have this XML:
> 
> <ROOMS>
>  <ROOM quantity="5">
>  <ROOM quantity="3">
>  <ROOM quantity="7">
> </ROOMS>

your xml buffer is not correct :)
close your ROOM tag...

<snip/>

> 
> How can implement this if a variable cannot be redefined??

you can use a named template, and call it recursively like this
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">

<xsl:template match="ROOMS/ROOM">
  <xsl:call-template name="print">
    <xsl:with-param name="max" select="@quantity"/>
  </xsl:call-template>
</xsl:template>

<xsl:template name="print">
  <xsl:param name="max"/>
  <xsl:param name="count">1</xsl:param>
	
  <xsl:choose>
    <xsl:when test="$count &lt; $max">
      <xsl:value-of select="$count"/><xsl:text>,</xsl:text>
      <xsl:call-template name="print">
        <xsl:with-param name="max" select="$max"/>
        <xsl:with-param name="count" select="$count + 1"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:when test="$count = $max">
      <xsl:value-of select="$count"/>
    </xsl:when>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>



Then the ouput will be

<?xml version="1.0" encoding="UTF-8"?>

 1,2,3,4,5
 1,2,3
 1,2,3,4,5,6,7


Fred

-- 
XPath free testing software :  http://lantern.sourceforge.net
Frédéric Laurent                     http://www.opikanoba.org

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread