Name

<xsl:for-each>

Synopsis

<xsl:for-each select= pattern />

Description

The <xsl:for-each> directive allows you to select any number of identical siblings in an XML document. 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 XSL 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 XSL processor processes a <title> element in each <chapter> element that is the child of a <book> element. The result is a list of each chapter that could be used for a table of contents.

Get XML Pocket Reference 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.