Элемент xsl:for-each

Элемент <xsl:for-each> позволяет организовывать циклы в процессе XSLT преобразования.

XSL элемент <xsl:for-each> может использоваться для выбора каждого XML элемента заданного узлового набора.

Пример


<?xml version="1.0" encoding="UTF-8"?>
<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> 

Примечание: Значением атрибута select в приведенном примере является выражение XPath, которое работает, как навигация по файловой системе, где прямая косая черта (/) выбирает поддиректории.

Фильтрация вывода

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


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

Допустимые операторы фильтрации:

  • = (равно)
  • != (не равно)
  • &lt; (меньше чем)
  • &gt; (больше чем)

Пример


<?xml version="1.0" encoding="UTF-8"?>
<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>