В следующем разделе будет показано, как использовать элементы типа <xsl:for-each> для извлечения содержимого из большого количества однородных элементов XML-файла.
The <xsl:for-each> element allows you to do looping in XSL!
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 of the transformation will look like this:
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
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:
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 will look like this:
Title |
Artist |
Empire Burlesque |
Bob Dylan |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.