<?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet href="../make-menu.xsl" type="text/xsl"?><html> <head> <this-is section="xsl-elements" page="for-each-group" subpage=""/> <!-- Generated at 2011-12-09T20:47:22.916Z--><title>Saxonica: XSLT and XQuery Processing: xsl:for-each-group</title> <meta name="coverage" content="Worldwide"/> <meta name="copyright" content="Copyright Saxonica Ltd"/> <meta name="title" content="Saxonica: XSLT and XQuery Processing: xsl:for-each-group"/> <meta name="robots" content="noindex,nofollow"/> <link rel="stylesheet" href="../saxondocs.css" type="text/css"/> </head> <body class="main"> <h1>xsl:for-each-group</h1> <p>The <code>xsl:for-each-group</code> element selects a sequence of nodes and/or atomic values and organizes them into subsets called groups. There are four possible ways of defining the grouping:</p> <ul> <li content="para"> <p> <b>group-by:</b> This groups together all items having the same value for a grouping key. The grouping key may have multiple values (a sequence of values) in which case the item is added to more than one group.</p> </li> <li content="para"> <p> <b>group-adjacent:</b> This groups together all items having the same value for a grouping key, provided that they are also adjacent in the input sequence. This is useful when you need to wrap a new element around a sequence of related elements in the source documents, for example a consecutive sequence of <code><bullet></code> elements. In this case the grouping key must be single-valued.</p> </li> <li content="para"> <p> <b>group-starting-with:</b> This processes the items in the supplied sequence in turn, starting a new group whenever one of the items matches a specified pattern. This is useful, for example, when matching an <code><h2></code> element and its following <code><p></code> elements.</p> </li> <li content="para"> <p> <b>group-ending-with:</b> This processes the items in the supplied sequence in turn, closing the current group whenever one of the items matches a specified pattern. This is useful when matching a sequence of items in which the last item in the group carries some distinguishing attribute such as <code>continued="no"</code>.</p> </li> </ul> <p>Saxon implements the <code>xsl:for-each-group</code> instruction in full. For examples of using the instruction, see <a href="http://www.w3.org/TR/xslt20/#grouping" class="bodylink">the XSLT 2.0 specification</a>.</p> <p>In XSLT 3.0, the capabilities of the <code>xsl:for-each-group</code> instruction are extended by virtue of the fact that the pattern used in <code>group-starting-with</code> or <code>group-ending-with</code> can now match atomic values as well as nodes.</p> <table width="100%"> <tr> <td> <p align="right"><a class="nav" href="function.xml">Next</a></p> </td> </tr> </table> </body> </html>