<xsl:for-each> |
Agit comme un opérateur d'itération de XSLT. Cet élément possède un attribut select qui sélectionne certains nœuds dans le contexte actuel.
Catégorie
Instruction
Attributs obligatoires
select Contient une expression XPath qui sélectionne des nœuds dans le contexte actuel.
Attributs facultatifs
Aucun.
Contenu
<xsl:for-each> contient un modèle évalué pour chacun des nœuds sélectionnés. L'élément <xsl:for-each> peut contenir un ou plusieurs éléments <xsl:sort> permettant de classer les nœuds sélectionnés avant de les traiter. Tous les éléments <xsl:sort> doivent précéder le début du modèle.
Apparaît dans
<xsl:for-each> apparaît dans un modèle.
Défini dans
XSLT section 8, Répétition.
Exemple
La feuille de style suivante illustre le fonctionnement de l'élément <xsl:for-each> :
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:output method="text"/>

      <xsl:variable name="newline">
    <xsl:text>
    </xsl:text>
      </xsl:variable>

      <xsl:variable name="complicatedVariable">
        <xsl:choose>
          <xsl:when test="count(//listitem) > 10">
            <xsl:text>really long list</xsl:text>
          </xsl:when>
          <xsl:when test="count(//listitem) > 5">
            <xsl:text>moderately long list</xsl:text>
          </xsl:when>
          <xsl:otherwise>
            <xsl:text>fairly short list</xsl:text>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>

      <xsl:template match="/">
        <xsl:value-of select="$newline"/>
        <xsl:text>Here is a </xsl:text>
        <xsl:value-of select="$complicatedVariable"/>
        <xsl:text>:</xsl:text>
        <xsl:value-of select="$newline"/>
        <xsl:variable name="listitems" select="list/listitem"/>
        <xsl:call-template name="processListitems">
          <xsl:with-param name="items" select="$listitems"/>
        </xsl:call-template>
      </xsl:template>

      <xsl:template name="processListitems">
        <xsl:param name="items"/>
        <xsl:for-each select="$items">
          <xsl:value-of select="position()"/>
          <xsl:text>.  </xsl:text>
          <xsl:value-of select="."/>
          <xsl:value-of select="$newline"/>
        </xsl:for-each>
      </xsl:template>

    </xsl:stylesheet>
Cette feuille de style utilise un élément <xsl:param> nommé items pour illustrer l'élément <xsl:for-each>. Le paramètre items contient un certain nombre d'éléments <listitem> provenant du document XML source ; l'élément <xsl:for-each> itère sur tous ces éléments et traite chacun d'eux. La feuille de style est appliquée au document XML suivant :
    <?xml version="1.0"?>
    <list>
      <title>A few of my favorite albums</title>
      <listitem>A Love Supreme</listitem>
      <listitem>Beat Crazy</listitem>
      <listitem>Here Come the Warm Jets</listitem>
      <listitem>Kind of Blue</listitem>
      <listitem>London Calling</listitem>
      <listitem>Remain in Light</listitem>
      <listitem>The Joshua Tree</listitem>
      <listitem>The Indestructible Beat of Soweto</listitem>
    </list>
Une fois la transformaion exécutée, les résultats sont les suivants :
    Here is a moderately long list:
    1.  A Love Supreme
    2.  Beat Crazy
    3.  Here Come the Warm Jets
    4.  Kind of Blue
    5.  London Calling
    6.  Remain in Light
    7.  The Joshua Tree
    8.  The Indestructible Beat of Soweto
L'élément <xsl:for-each> a itéré sur tous les éléments <listitem> provenant du document XML source et les a tous traité.