Mega Code Archive

 
Categories / XML / XSLT StyleSheet
 

Multi-level

File: Data.xml <?xml version="1.0"?> <staff>   <employee name="J" department="sales" location="New York" />   <employee name="B" department="personnel" location="Los Angeles" />   <employee name="C" department="transport" location="New York" />   <employee name="W" department="personnel" location="Los Angeles" />   <employee name="M" department="sales" location="Seattle" /> </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="@location">       <xsl:sort select="current-grouping-key()" />       <p class="indent0">         <xsl:text>Location </xsl:text>         <xsl:value-of select="current-grouping-key()" />       </p>       <xsl:for-each-group select="current-group()"         group-by="@department">         <xsl:sort select="current-grouping-key()" />         <p class="indent1">           <xsl:text>Location </xsl:text>           <xsl:value-of select="current-grouping-key()" />         </p>         <xsl:for-each select="current-group()">           <xsl:sort select="@name" />           <p class="indent2">             <xsl:text>Location </xsl:text>             <xsl:value-of select="@name" />           </p>         </xsl:for-each>       </xsl:for-each-group>     </xsl:for-each-group>   </xsl:template> </xsl:stylesheet> Output: <p class="indent0">Location Los Angeles</p> <p class="indent1">Location personnel</p> <p class="indent2">Location B</p> <p class="indent2">Location W</p> <p class="indent0">Location New York</p> <p class="indent1">Location sales</p> <p class="indent2">Location J</p> <p class="indent1">Location transport</p> <p class="indent2">Location C</p> <p class="indent0">Location Seattle</p> <p class="indent1">Location sales</p> <p class="indent2">Location M</p>