[xsl] XPath expression that yields the same result as xsl:for-each-group?

Subject: [xsl] XPath expression that yields the same result as xsl:for-each-group?
From: "Costello, Roger L. costello@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 30 May 2019 12:46:06 -0000
Hello XSLT/XPath experts!

My XML document consists of a series of rows.

Each row is identified by the combination of two child elements: ARPT__IDENT
and TRM__IDENT.

I want to group the rows. A group consists of those rows with the same
ARPT__IDENT and TRM__IDENT.

This XML document:

<Test>
    <row>
        <ARPT__IDENT>A</ARPT__IDENT>
        <TRM__IDENT>X</TRM__IDENT>
        <Data>Foo</Data>
    </row>
    <row>
        <ARPT__IDENT>A</ARPT__IDENT>
        <TRM__IDENT>X</TRM__IDENT>
        <Data>Bar</Data>
    </row>
    <row>
        <ARPT__IDENT>A</ARPT__IDENT>
        <TRM__IDENT>Y</TRM__IDENT>
        <Data>Blah</Data>
    </row>
    <row>
        <ARPT__IDENT>A</ARPT__IDENT>
        <TRM__IDENT>Y</TRM__IDENT>
        <Data>Plugh</Data>
    </row>
</Test>

is to be grouped this way:

<results>
    <group>
        <row>
            <ARPT__IDENT>A</ARPT__IDENT>
            <TRM__IDENT>X</TRM__IDENT>
            <Data>Foo</Data>
        </row>
        <row>
            <ARPT__IDENT>A</ARPT__IDENT>
            <TRM__IDENT>X</TRM__IDENT>
            <Data>Bar</Data>
        </row>
    </group>
    <group>
        <row>
            <ARPT__IDENT>A</ARPT__IDENT>
            <TRM__IDENT>Y</TRM__IDENT>
            <Data>Blah</Data>
        </row>
        <row>
            <ARPT__IDENT>A</ARPT__IDENT>
            <TRM__IDENT>Y</TRM__IDENT>
            <Data>Plugh</Data>
        </row>
    </group>
</results>

I can use xsl:for-each-group to perform the grouping:

<xsl:template match="Test">
    <xsl:variable name="rows" select="row" as="element(row)*"/>
    <results>
        <xsl:for-each-group select="$rows" group-by="concat(ARPT__IDENT, '|',
TRM__IDENT)">
            <group>
                <xsl:sequence select="current-group()" />
            </group>
        </xsl:for-each-group>
    </results>
</xsl:template>

However, I want to create a variable -- $groups -- which holds the groups and
then iterate over the variable:

<results>
    <xsl:for-each select="$groups">
        <group>
            <xsl:sequence select="." />
        </group>
    </xsl:for-each>
</results>

What XPath expression will yield the desired value for $groups?

<xsl:variable name="groups" select="???" />

Is there an XPath 2.0 expression that can be used?

/Roger

Current Thread