Élément <xsl:for-each>

Applique un modèle de manière répétée, c'est-à-dire à chaque nœud d'une collection.

<xsl:for-each
  select = Expression
</xsl:for-each>

Attributs

  • select
    Requis. Expressions (XSLT) évaluée dans le contexte actuel pour déterminer la collection de nœuds sur laquelle l'itération doit porter.

Informations sur les éléments

Nombre d'occurrences

Illimité

Éléments parents

xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processing-instruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, éléments de sortie

Éléments enfants

xsl:apply-imports, xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:number, xsl:processing-instruction, xsl:sort, xsl:text, xsl:value-of, xsl:variable

Notes

L'élément <xsl:for-each> établit le contexte de l'itération. Les instructions de transformation XSLT contenues dans cette boucle doivent être appliquées aux nœuds sélectionnés. Chaque élément source sélectionné par <xsl:for-each> devient un nouveau contexte dans lequel surviennent les critères spéciaux dans <xsl:for-each>.

Exemple

Le fichier XSLT de cet exemple définit la structure d'un document de sortie. La sortie est un élément HTML de niveau supérieur contenant les éléments <BODY> et <TABLE>. Le tableau contient des lignes répétées pour chaque client. Le fichier XSLT utilise également des modèles pour créer des éléments <TD> pour les éléments source de nom, d'adresse et de téléphone.

Fichier XML (customers.xml)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="foreach.xsl" ?>
<customers>
   <customer>
      <name>John Smith</name>
      <address>123 Oak St.</address>
      <state>WA</state>
      <phone>(206) 123-4567</phone>
   </customer>
   <customer>
      <name>Zack Zwyker</name>
      <address>368 Elm St.</address>
      <state>WA</state>
      <phone>(206) 423-4537</phone>
   </customer>
   <customer>
      <name>Albert Aikens</name>
      <address>368 Elm St.</address>
      <state>WA</state>
      <phone>(206) 423-4537</phone>
   </customer>
   <customer>
      <name>Albert Gandy</name>
      <address>6984 4th St.</address>
      <state>WA</state>
      <phone>(206) 433-4547</phone>
   </customer>
   <customer>
      <name>Peter Furst</name>
      <address>456 Pine Av.</address>
      <state>CA</state>
      <phone>(209) 765-4321</phone>
   </customer>
   <customer>
      <name>Dan Russell</name>
      <address>9876 Main St.</address>
      <state>PA</state>
      <phone>(323) 321-7654</phone>
   </customer>
</customers>

Fichier XSLT (foreach.xsl)

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

  <xsl:template match="/">
    <HTML>
      <BODY>
        <TABLE>
          <xsl:for-each select="customers/customer">
            <xsl:sort select="state" order="descending"/>
            <xsl:sort select="name"/>
            <TR>
              <TD><xsl:value-of select="name" /></TD>
              <TD><xsl:value-of select="address" /></TD>
              <TD><xsl:value-of select="phone" /></TD>
            </TR>
          </xsl:for-each>
        </TABLE>

      </BODY>
    </HTML>
  </xsl:template>

</xsl:stylesheet>

Sortie

Voici les données en sortie formatées :

Résultat mis en forme

Voici les données en sortie du processeur :

<HTML>
<BODY>
<TABLE>
<TR>
<TD>Albert Aikens</TD>
<TD>368 Elm St.</TD>
<TD>(206) 423-4537</TD>
</TR>
<TR>
<TD>Albert Gandy</TD>
...
</TR>
</TABLE>

</BODY>
</HTML>