Sort by department
File: Data.xml <?xml version="1.0"?> <staff> <employee name="J" department="sales" /> <employee name="B" department="personnel" /> <employee name="C" department="transport" /> <employee name="W" department="personnel" /> <employee name="M" department="sales" /> </staff> File: Transform.xslt <?xml version="1.0"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes" /> <xsl:template match="staff"> <xsl:for-each-group select="employee" group-by="@department"> <xsl:sort select="current-grouping-key()" /> <h2> <xsl:value-of select="current-grouping-key()" /> <xsl:text> department</xsl:text> </h2> <xsl:for-each select="current-group()"> <xsl:sort select="@name" /> <p> <xsl:value-of select="@name" /> </p> </xsl:for-each> </xsl:for-each-group> </xsl:template> </xsl:stylesheet> Output: <h2>personnel department</h2> <p>B</p> <p>W</p> <h2>sales department</h2> <p>J</p> <p>M</p> <h2>transport department</h2> <p>C</p>