Name

<xsl:for-each>

Synopsis

The <xsl:for-each> directive allows you to select any number of nodes in an XML document that match the same expression given by select. For example, consider the following XML document:

<book>
   <chapter>
      <title>A Mystery Unfolds</title>
      <paragraph>
      It was a dark and stormy night...
      </paragraph>
   </chapter>
   <chapter>
      <title>A Sudden Visit</title>
      <paragraph>
      Marcus found himself sleeping...
      </paragraph>
   </chapter>
</book>

Note there are two <chapter> siblings in the document. Let’s assume we want to provide an HTML numbered list for each <title> element that is the direct child of a <chapter> element, which in turn has a <book> element as a parent. The following template performs the task:

<xsl:template match="book>
   <ol>
   <xsl:for-each select="chapter">
      <li><xsl:process select="title"></li>
   </xsl:for-each>
   </ol>
</xsl:template>

After formatting, here is what the result looks like:

<ol>
<li>A Mystery Unfolds</li>
<li>A Sudden Visit</li>
</ol>

The XSLT processor processes a <title> element in each <chapter> element that is the child of a <book> element. The result is a numbered list of chapters that could be used for a table of contents.

<xsl:for-each select="node-set-expression"/>

Get Webmaster in a Nutshell, Third Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.