XSLT <xsl:for-each> Element

From http://www.w3schools.com (Copyright Refsnes Data)

# XSLT <xsl:for-each> Element

The <xsl:for-each> element allows you to do looping in XSLT.

## The <xsl:for-each> Element

The XSL <xsl:for-each> element can be used to select every XML element of a specified node-set:

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

    <xsl:template match="/">
      <html>
      <body>
        <h2>My CD Collection</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Title</th>
            <th>Artist</th>
          </tr>
          <xsl:for-each select="catalog/cd">
          <tr>
            <td><xsl:value-of select="title"/></td>
            <td><xsl:value-of select="artist"/></td>
          </tr>
          </xsl:for-each>
        </table>
      </body>
      </html>
    </xsl:template>

    </xsl:stylesheet>

Note: The value of the select attribute is an XPath expression. An XPath expression works like navigating a file system; where a forward slash (/) selects subdirectories.

The result of the transformation above will look like this:

## My CD Collection

Title | Artist
--- | ---
Empire Burlesque | Bob Dylan
Hide your heart | Bonnie Tyler
Greatest Hits | Dolly Parton
Still got the blues | Gary More
Eros | Eros Ramazzotti
One night only | Bee Gees
Sylvias Mother | Dr.Hook
Maggie May | Rod Stewart
Romanza | Andrea Bocelli
When a man loves a woman | Percy Sledge
Black angel | Savage Rose
1999 Grammy Nominees | Many
For the good times | Kenny Rogers
Big Willie style | Will Smith
Tupelo Honey | Van Morrison
Soulsville | Jorn Hoel
The very best of | Cat Stevens
Stop | Sam Brown
Bridge of Spies | T`Pau
Private Dancer | Tina Turner
Midt om natten | Kim Larsen
Pavarotti Gala Concert | Luciano Pavarotti
The dock of the bay | Otis Redding
Picture book | Simply Red
Red | The Communards
Unchain my heart | Joe Cocker

View the XML file, View the XSL file, and View the result

## Filtering the Output

We can also filter the output from the XML file by adding a criterion to the select attribute in the <xsl:for-each> element.

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">

Legal filter operators are:

- = (equal)
- != (not equal)
- &lt; less than
- &gt; greater than

Take a look at the adjusted XSL style sheet:

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

    <xsl:template match="/">
     <html>
      <body>
      <h2>My CD Collection</h2>
      <table border="1">
       <tr bgcolor="#9acd32">
          <th>Title</th>
          <th>Artist</th>
       </tr>
       <xsl:for-each select="catalog/cd[artist='Bob Dylan']">
       <tr>
          <td><xsl:value-of select="title"/></td>
          <td><xsl:value-of select="artist"/></td>
       </tr>
       </xsl:for-each>
      </table>
     </body>
     </html>
    </xsl:template>

    </xsl:stylesheet>

The result of the transformation above will look like this:

## My CD Collection

Title | Artist
--- | ---
Empire Burlesque | Bob Dylan

View the XML file, View the XSL file, View the result

From http://www.w3schools.com (Copyright Refsnes Data)