<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=XML%2FXSLT_stylesheet%2Ffor_each_group</id>
		<title>XML/XSLT stylesheet/for each group - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=XML%2FXSLT_stylesheet%2Ffor_each_group"/>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=XML/XSLT_stylesheet/for_each_group&amp;action=history"/>
		<updated>2026-04-04T10:54:01Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wbex.ru/index.php?title=XML/XSLT_stylesheet/for_each_group&amp;diff=10337&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=XML/XSLT_stylesheet/for_each_group&amp;diff=10337&amp;oldid=prev"/>
				<updated>2010-05-26T08:26:15Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 08:26, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://wbex.ru/index.php?title=XML/XSLT_stylesheet/for_each_group&amp;diff=10336&amp;oldid=prev</id>
		<title> в 18:22, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=XML/XSLT_stylesheet/for_each_group&amp;diff=10336&amp;oldid=prev"/>
				<updated>2010-05-25T18:22:29Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Alternate group==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Data.xml&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;SCENE&amp;gt;&lt;br /&gt;
  &amp;lt;TITLE&amp;gt;title 1&amp;lt;/TITLE&amp;gt;&lt;br /&gt;
  &amp;lt;STAGEDIR&amp;gt;Enter&amp;lt;/STAGEDIR&amp;gt;&lt;br /&gt;
  &amp;lt;SPEECH&amp;gt;&lt;br /&gt;
    &amp;lt;SPEAKER&amp;gt;I&amp;lt;/SPEAKER&amp;gt;&lt;br /&gt;
    &amp;lt;LINE&amp;gt;A&amp;lt;/LINE&amp;gt;&lt;br /&gt;
    &amp;lt;LINE&amp;gt;A&amp;lt;/LINE&amp;gt;&lt;br /&gt;
    &amp;lt;LINE&amp;gt;C&amp;lt;/LINE&amp;gt;&lt;br /&gt;
    &amp;lt;LINE&amp;gt;B&amp;lt;/LINE&amp;gt;&lt;br /&gt;
    &amp;lt;LINE&amp;gt;H&amp;lt;/LINE&amp;gt;&lt;br /&gt;
    &amp;lt;LINE&amp;gt;A&amp;lt;/LINE&amp;gt;&lt;br /&gt;
  &amp;lt;/SPEECH&amp;gt;&lt;br /&gt;
&amp;lt;/SCENE&amp;gt;&lt;br /&gt;
File: Transform.xslt&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot;&lt;br /&gt;
     xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;     &lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;SPEECH&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:for-each-group select=&amp;quot;*&amp;quot; &lt;br /&gt;
           group-adjacent=&amp;quot;if (self::SPEAKER) then 0 else 1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;xsl:for-each select=&amp;quot;current-group()&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
       &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;SCENE/TITLE&amp;quot;/&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;SCENE/TITLE&amp;quot;/&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:apply-templates select=&amp;quot;SCENE&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;ACT&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h2&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;TITLE&amp;quot;/&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:apply-templates select=&amp;quot;* except TITLE&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;SCENE&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:variable name=&amp;quot;sequence&amp;quot; as=&amp;quot;element()*&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:for-each-group select=&amp;quot;* except TITLE&amp;quot; &lt;br /&gt;
        group-adjacent=&amp;quot;if (self::SPEAKER) &lt;br /&gt;
                        then &amp;quot;SPEAKERS&amp;quot; else &amp;quot;LINES&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:element name=&amp;quot;{current-grouping-key()}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:copy-of select=&amp;quot;current-group()&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:element&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:for-each-group select=&amp;quot;$sequence&amp;quot; group-starting-with=&amp;quot;SPEAKERS&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;current-group()&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates/&amp;gt;  &lt;br /&gt;
            &amp;lt;xsl:if test=&amp;quot;position() != last()&amp;quot;&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;   &lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;STAGEDIR&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;amp;#xa0;&amp;amp;#xa0;&amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
Output:&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
   &amp;lt;head&amp;gt;&lt;br /&gt;
      &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;title&amp;gt;title 1&amp;lt;/title&amp;gt;&lt;br /&gt;
   &amp;lt;/head&amp;gt;&lt;br /&gt;
   &amp;lt;body&amp;gt;&lt;br /&gt;
      &amp;lt;h1&amp;gt;title 1&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;table&amp;gt;&lt;br /&gt;
         &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;Enter&amp;lt;br&amp;gt;&lt;br /&gt;
                   I&lt;br /&gt;
                   A&lt;br /&gt;
                   A&lt;br /&gt;
                   C&lt;br /&gt;
                   B&lt;br /&gt;
                   H&lt;br /&gt;
                   A&lt;br /&gt;
                 &lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
         &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/table&amp;gt;&lt;br /&gt;
   &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Composite==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Data.xml&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;staff&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;J&amp;quot; department=&amp;quot;sales&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;B&amp;quot; department=&amp;quot;personnel&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;C&amp;quot; department=&amp;quot;transport&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;W&amp;quot; department=&amp;quot;personnel&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;M&amp;quot; department=&amp;quot;sales&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/staff&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Transform.xslt&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot;&lt;br /&gt;
  xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;staff&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:for-each-group select=&amp;quot;employee&amp;quot; group-by=&amp;quot;@location&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each-group select=&amp;quot;current-group()&amp;quot;&lt;br /&gt;
        group-by=&amp;quot;@department&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h2&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of&lt;br /&gt;
            select=&amp;quot;&amp;quot;Department:&amp;quot;, @department, &amp;quot;Location:&amp;quot;, @location&amp;quot;&lt;br /&gt;
            separator=&amp;quot; &amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;current-group()&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@name&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==for-each-group select=&amp;quot;current-group() except .&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot;&lt;br /&gt;
  xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;body&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each-group select=&amp;quot;*&amp;quot; group-starting-with=&amp;quot;h1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot; mode=&amp;quot;group&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;h1&amp;quot; mode=&amp;quot;group&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each-group select=&amp;quot;current-group() except .&amp;quot;&lt;br /&gt;
        group-starting-with=&amp;quot;h2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot; mode=&amp;quot;group&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;h2&amp;quot; mode=&amp;quot;group&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each-group select=&amp;quot;current-group() except .&amp;quot;&lt;br /&gt;
        group-starting-with=&amp;quot;h3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot; mode=&amp;quot;group&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;h3&amp;quot; mode=&amp;quot;group&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:copy-of select=&amp;quot;current-group() except .&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;p&amp;quot; mode=&amp;quot;group&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:copy-of select=&amp;quot;current-group()&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
Output:&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  A&lt;br /&gt;
  B&lt;br /&gt;
  C&lt;br /&gt;
  D&lt;br /&gt;
  E&lt;br /&gt;
  F&lt;br /&gt;
  G&lt;br /&gt;
  H&lt;br /&gt;
  I&lt;br /&gt;
  J&lt;br /&gt;
  K&lt;br /&gt;
  L&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==for-each-group select=&amp;quot;html/body/*&amp;quot; group-adjacent==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Data.xml&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt;S&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;item&amp;quot;&amp;gt;D &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;item&amp;quot;&amp;gt;S&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;T&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;M&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;X&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;item&amp;quot;&amp;gt;F&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt;Steps for grouping in XSLT 2.0&amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;item&amp;quot;&amp;gt;A&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;item&amp;quot;&amp;gt;B&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;C&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;item&amp;quot;&amp;gt;D&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Transform.xslt&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot; &lt;br /&gt;
     xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; include-content-type=&amp;quot;no&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each-group select=&amp;quot;html/body/*&amp;quot;&lt;br /&gt;
          group-adjacent=&amp;quot;if (self::p[@class=&amp;quot;item&amp;quot;]) then 1 &lt;br /&gt;
                          else if (self::p[@class=&amp;quot;note&amp;quot;]) then 2 &lt;br /&gt;
                          else 3&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;current-grouping-key() = 1&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;current-group()&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:copy-of select=&amp;quot;@*[not(name()=&amp;quot;class&amp;quot;)]&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:apply-templates select=&amp;quot;*|text()&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;current-grouping-key() = 2&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:variable name=&amp;quot;starting-point&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:number count=&amp;quot;p[@class=&amp;quot;note&amp;quot;]&amp;quot; level=&amp;quot;any&amp;quot; format=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
                &amp;lt;p&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of &lt;br /&gt;
                        select=&amp;quot;if (count(current-group()) gt 1)&lt;br /&gt;
                                then &amp;quot;Notes&amp;quot; &lt;br /&gt;
                                else &amp;quot;Note&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;ol start=&amp;quot;{$starting-point}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;current-group()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;li&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:copy-of select=&amp;quot;@*[not(name()=&amp;quot;class&amp;quot;)]&amp;quot;/&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:apply-templates select=&amp;quot;*|text()&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/li&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/ol&amp;gt; &lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;current-group()&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:copy-of select=&amp;quot;@*&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
Output:&lt;br /&gt;
&amp;lt;h2&amp;gt;S&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;D &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; &lt;br /&gt;
   &amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;S&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Notes&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;T&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;M&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;X&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;F&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Steps for grouping in XSLT 2.0&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;A&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;B&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Note&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;C&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;D&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Group by department==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Data.xml&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;staff&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;J&amp;quot; department=&amp;quot;sales&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;B&amp;quot; department=&amp;quot;personnel&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;C&amp;quot; department=&amp;quot;transport&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;W&amp;quot; department=&amp;quot;personnel&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;M&amp;quot; department=&amp;quot;sales&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/staff&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Transform.xslt&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot;&lt;br /&gt;
  xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;staff&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:for-each-group select=&amp;quot;employee&amp;quot; group-by=&amp;quot;@department&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:value-of select=&amp;quot;current-grouping-key()&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:text&amp;gt; department&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
      &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;current-group()&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
Output:&lt;br /&gt;
&amp;lt;h2&amp;gt;sales department&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;J&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;M&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;personnel department&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;B&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;W&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;transport department&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;C&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Multi-level==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Data.xml&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;staff&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;J&amp;quot; department=&amp;quot;sales&amp;quot; location=&amp;quot;New York&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;B&amp;quot; department=&amp;quot;personnel&amp;quot; location=&amp;quot;Los Angeles&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;C&amp;quot; department=&amp;quot;transport&amp;quot; location=&amp;quot;New York&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;W&amp;quot; department=&amp;quot;personnel&amp;quot; location=&amp;quot;Los Angeles&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;M&amp;quot; department=&amp;quot;sales&amp;quot; location=&amp;quot;Seattle&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/staff&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Transform.xslt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot;&lt;br /&gt;
  xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;staff&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:for-each-group select=&amp;quot;employee&amp;quot; group-by=&amp;quot;@location&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:sort select=&amp;quot;current-grouping-key()&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;p class=&amp;quot;indent0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:text&amp;gt;Location &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:value-of select=&amp;quot;current-grouping-key()&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each-group select=&amp;quot;current-group()&amp;quot;&lt;br /&gt;
        group-by=&amp;quot;@department&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:sort select=&amp;quot;current-grouping-key()&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;p class=&amp;quot;indent1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:text&amp;gt;Location &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;current-grouping-key()&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;current-group()&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:sort select=&amp;quot;@name&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;indent2&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Location &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
Output:&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent0&amp;quot;&amp;gt;Location Los Angeles&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent1&amp;quot;&amp;gt;Location personnel&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent2&amp;quot;&amp;gt;Location B&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent2&amp;quot;&amp;gt;Location W&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent0&amp;quot;&amp;gt;Location New York&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent1&amp;quot;&amp;gt;Location sales&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent2&amp;quot;&amp;gt;Location J&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent1&amp;quot;&amp;gt;Location transport&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent2&amp;quot;&amp;gt;Location C&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent0&amp;quot;&amp;gt;Location Seattle&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent1&amp;quot;&amp;gt;Location sales&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;indent2&amp;quot;&amp;gt;Location M&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sort by department==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Data.xml&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;staff&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;J&amp;quot; department=&amp;quot;sales&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;B&amp;quot; department=&amp;quot;personnel&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;C&amp;quot; department=&amp;quot;transport&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;W&amp;quot; department=&amp;quot;personnel&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;employee name=&amp;quot;M&amp;quot; department=&amp;quot;sales&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/staff&amp;gt;&lt;br /&gt;
File: Transform.xslt&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot;&lt;br /&gt;
  xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;staff&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:for-each-group select=&amp;quot;employee&amp;quot; group-by=&amp;quot;@department&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:sort select=&amp;quot;current-grouping-key()&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:value-of select=&amp;quot;current-grouping-key()&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:text&amp;gt; department&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
      &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;current-group()&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:sort select=&amp;quot;@name&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select=&amp;quot;@name&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
Output:&lt;br /&gt;
&amp;lt;h2&amp;gt;personnel department&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;B&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;W&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;sales department&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;J&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;M&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;transport department&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;C&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==use for-each-group==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Data.xml&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;towns&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;A&amp;lt;/town&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;B&amp;lt;/town&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;C&amp;lt;/town&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;D&amp;lt;/town&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;E&amp;lt;/town&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;F&amp;lt;/town&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;G&amp;lt;/town&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;H&amp;lt;/town&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;I&amp;lt;/town&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;J&amp;lt;/town&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;K&amp;lt;/town&amp;gt;&lt;br /&gt;
  &amp;lt;town&amp;gt;L&amp;lt;/town&amp;gt;&lt;br /&gt;
&amp;lt;/towns&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Transform.xslt&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot;&lt;br /&gt;
  xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:param name=&amp;quot;cols&amp;quot; select=&amp;quot;4&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;towns&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each-group select=&amp;quot;town&amp;quot;&lt;br /&gt;
        group-adjacent=&amp;quot;(position()-1) idiv $cols&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;current-group()&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each-group&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
Output:&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;A&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;B&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;C&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;D&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;E&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;F&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;G&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;H&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;I&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;J&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;K&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;L&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>