xsl:for-each-group¶
Selects a sequence of nodes and/or atomic values and organizes them into subsets called groups.
Available in XSLT 2.0 and later versions. Available in all Saxon editions.
- Category: instruction
- Content: (
xsl:sort
* , sequence-constructor ) - Permitted parent elements: any XSLT element whose content model is sequence-constructor; any literal result element
Attributes¶
select
- expression
- Expression to select nodes/values.
group-by?
- expression
- 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?
- expression
- 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?
- pattern
- 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?
- pattern
- 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"
. composite?
- boolean
- Can be used when grouping using either
group-by
orgroup-adjacent
. If set toyes
, then thegroup-by
andgroup-adjacent
expressions may evaluate to a sequence, and grouping is done by comparing the entire sequence. If set to no (the default), then whengroup-by
evaluates to a sequence, the relevant item has multiple grouping keys and goes in multiple groups; withgroup-adjacent
, a sequence-valued grouping key is then an error. collation?
- { uri }
- The name of a collating sequence, used when comparing grouping keys. Can be used when grouping using either
group-by
orgroup-adjacent
. If present it must be a collation URI that uses the scheme and pathhttp://www.w3.org/2013/collation/UCA
, in which case it requests use of the Unicode Collation Algorithm, or is a collation otherwise recognized by Saxon: see Collation.
Notes on the Saxon implementation¶
Earlier drafts of XSLT 3.0 introduced new attributes bind-group
and bind-grouping-key
; these are no longer supported since Saxon 9.6.
The composite
attribute has been implemented since Saxon 9.6.
Since 9.6, Saxon supports streamed grouping when the group-adjacent
, group-starting-with
, or group-ending-with
attributes are used. Streaming with a group-by
attribute became available in 9.7 maintenance releases and is fully supported in Saxon 9.8 (in this case the xsl:for-each-group
instruction must appear within xsl:fork
.)
Details¶
There are four possible ways of defining the grouping using different attributes: group-by
, group-adjacent
, group-starting-with
, and group-ending-with
.
In XSLT 3.0, the capabilities of the xsl:for-each-group
instruction are extended by virtue of the fact that the pattern used in group-starting-with
or group-ending-with
can now match atomic values as well as nodes.
Examples¶
For examples of using the instruction, see the XSLT 2.0 specification.