The xsl:for-each-group
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:
group-by: 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.
group-adjacent: 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 <bullet>
elements. In this case the grouping key must be single-valued.
group-starting-with: 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 <h2>
element and its following <p>
elements.
group-ending-with: 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 continued="no"
.
Saxon implements the xsl:for-each-group
instruction in full, except that some error
conditions are not detected. For examples of using the instruction, see
the draft XSLT 2.0 specification.