Previous | Next | Indexes
Zvon > Tutorials > XSLT 2.0 Tutorial > Groups (3/10) >

Grouping with group-starting-with

The group-starting-with attribute of xsl:for-each-group element enables grouping based on nodes, which are selected with group-starting-with XPath expression. The select attribute of xsl:for-each-group selects a population of nodes. The first node of this population starts the first group and other nodes from the population are gradually added to the group till a node conforming to group-starting-with is encountered. This node starts a new group and the process is continued.

XSLT

      <xsl:stylesheet
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                  version="2.0">
            <xsl:output  method="xml"
                        indent="yes"
                        omit-xml-declaration="yes"/>

            <xsl:template  match="/aaa">
                  <xsl:for-each-group  select="*"
                              group-starting-with="bbb">
                        <xsl:apply-templates  select="."/>
                        <group-members>
                              <xsl:apply-templates  select="current-group()"/>
                        </group-members>
                  </xsl:for-each-group>
            </xsl:template>

            <xsl:template  match="*">
                  <xsl:copy-of  select="."/>
            </xsl:template>

      </xsl:stylesheet>
XML

      <aaa>
            <sss  v="0"/>
            <bbb  v="1"/>
            <ccc  v="2"/>
            <bbb  v="3"/>
            <eee  v="4"/>
            <fff  v="5"/>
            <bbb  v="6"/>
            <fff  v="7"/>
      </aaa>
Output

      <sss  v="0"/>
      <group-members>
            <sss  v="0"/>
      </group-members>
      <bbb  v="1"/>
      <group-members>
            <bbb  v="1"/>
            <ccc  v="2"/>
      </group-members>
      <bbb  v="3"/>
      <group-members>
            <bbb  v="3"/>
            <eee  v="4"/>
            <fff  v="5"/>
      </group-members>
      <bbb  v="6"/>
      <group-members>
            <bbb  v="6"/>
            <fff  v="7"/>
      </group-members>


Previous chapter: Elements and attributes
Next chapter: Multiple source documents
Previous page: Grouping with group-adjacent
Next page: Grouping with group-ending-with