31 mars 2003

Comment écrire une boucle 'for' en XSL ?

Il n'est pas possible, nativement, de faire des boucles "For" ou des boucles "While" en XSL.
Rappelons que le XSL n'est pas un langage de programmation, mais un langage de template, son but est donc de manipuler des données.

Bien cela-dit il est quand même parfois utile de faire des boucles, alors voilà 2 méthodes :

  • la première consiste à utiliser des extensions XSL, vous trouverez plus d'informations 1
  • la seconde consiste à les écrire d'une autre manière. Comment ?

mais récursivement bien sûr !

La boucle suivante en C :


for(i = 0; i < 10; i++) {
 
    printf("Comptons %d \n", i);

}

Donnera en XSL un template :


   <xsl:template name="bouclefor">
    <xsl:param name="min"></xsl:param>
    <xsl:param name="max"></xsl:param>

    Comptons <xsl:value-of select="$min"></xsl:value-of>

    <xsl:if test="number($min) &lt; number($max - 1)">
      <xsl:call-template name="bouclefor">
        <xsl:with-param name="min">
          <xsl:value-of select="$min + 1"></xsl:value-of>
        </xsl:with-param>
        <xsl:with-param name="max">
          <xsl:value-of select="$max"></xsl:value-of>
        </xsl:with-param>
      </xsl:call-template>
    </xsl:if>

  </xsl:template>

que l'on appellera de la sorte :

 

  <xsl:template match="/">
      <xsl:call-template name="bouclefor">
        <xsl:with-param name="min">0</xsl:with-param>
        <xsl:with-param name="max">10</xsl:with-param>
      </xsl:call-template>
  </xsl:template>

Aucun commentaire:

Enregistrer un commentaire