Представление данных в формате XML, страница 2

В следующем разделе будет показано, как использовать элементы типа <xsl:for-each> для извлечения содержимого из большого количества однородных элементов XML-файла.


The <xsl:for-each> element allows you to do looping in XSL!


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 required select attribute contains an XPath expression. It works like navigating a file system where a forward slash (/) selects subdirectories.


The Result

The result of the transformation 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

If you have Netscape 6 or IE 5 or higher you can view: the XML file and the XSL file

View the result with Netscape 6 or IE 6

View the result with IE 5


Filtering the Output

We can filter the output from an 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

The result of the transformation will look like this:

My CD Collection

Title

Artist

Empire Burlesque

Bob Dylan