グループを処理するデフォルトの順序は、「最初の出現順序」です。グループ化キーとしての「ロンドン」の最初の出現が「パリ」の最初の出現に先行する場合、キー「ロンドン」のグループは、キー「パリ」のグループの前で処理されます。 xsl:for-each-groupの子としてxsl:sortを使用して順序を変更することができます。どちらの場合も、命令は命令の複数の使用間で安定しているだけでなく、異なる実装間で予測可能で相互運用可能です。
@ michael.hor257kと同じグループ化を2回行うのは悪い考えであると私は同意できません。まず、マップを使用してXSLT 3.0に移行するまで、グループを保持するための便利なデータ構造はありません。第二に、ここではメモリ時間のトレードオフがありますので、状況によって異なります。
<xsl:variable name="groups" as="map(xs:string, node()*)">
<xsl:map>
<xsl:for-each-group
select="descendant::FormSectionElements[not(LoadBindBase = '')]">
<xsl:map-entry key="current-grouping-key()" select="current-group()"/>
</xsl:for-each-group>
</xsl:map>
</xsl:variable>
、その後、あなたは、たとえば、使用してグループを反復処理することができます:
3.0にマップでこれを行う方法は次のようになり
<xsl:for-each select="map:keys($groups)">
<group key="{.}">
<xsl:apply-templates select="$groups(.)" mode="xxx"/>
</group>
</xsl:for-each>
マップの処理の順序: keys()は予測不可能ですが、複数の呼び出しで一貫している必要があります。