<xsl:for-each> |
Diese Anweisung ist der Iterationsoperator von XSLT. Dieses Element besitzt ein select-Attribut, das einige Knoten aus dem aktuellen Kontext entfernt.
Kategorie
Anweisung
Obligatorische Attribute
select Dieses Attribut enthält einen XPath-Ausdruck, der aus dem aktuellen Kontext Knoten auswählt.
Optionale Attribute
Keine
Inhalt
<xsl:for-each> enthält eine Vorlage, die jeden der ausgewählten Knoten bewertet. Das Element <xsl:for-each> kann eines oder mehrere <xsl:sort>-Elemente enthalten, um die ausgewählten Knoten zu sortieren, bevor sie verarbeitet werden. Alle <xsl:sort>-Elemente müssen erscheinen, bevor die Vorlage beginnt.
Übergeordnetes Element
<xsl:for-each> erscheint innerhalb einer Vorlage.
Definition
XSLT-Abschnitt 8, Wiederholung
Beispiel
Die Funktionsweise des Elements <xsl:for-each> wird durch das folgende Stylesheet veranschaulicht:
    <?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>
In diesem Stylesheet wird ein <xsl:param>-Parameter namens items verwendet, um die Funktionsweise des <xsl:for-each>-Elements zu verdeutlichen. Der Parameter items enthält eine Reihe von <listitem>-Elementen aus dem XML-Ausgangsdokument. Das Element <xsl:for-each> durchschreitet jedes einzelne dieser Elemente. Dieses Stylesheet wird auf das folgende Dokument angewendet:
    <?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>
Hier die Ergebnisse, die entstehen, wenn die Transformation ausgeführt wird:
    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
Das Element <xsl:for-each> hat alle <listitem>-Elemente aus dem XML-Ausgangsdokument durchschritten und jedes davon verarbeitet.