<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    <xsl:key name="child-group" match="//descMdGroup" use="subparent/child"/>
    <xsl:key name="city-group" match="//descMdGroup" use="subparent/city"/>
    <xsl:key name="state-group" match="//descMdGroup" use="subparent/state"/>
    
    
<xsl:template match="/">

    <xsl:for-each select="//parent[generate-id(.) = generate-id(key('child-group', subparent/child))]">
        <tr>							
            <td colspan="2">
                <!-- Griup by <child> -->
                <div class="erp-toc-header1">
                    <xsl:value-of select="subparent/child"/> 
                </div>
            </td>
        </tr>			
        <xsl:variable name="setOfchildGroup" select="key('child-group', subparent/child)"/>
        
        <!-- Grouping by State -->
        <xsl:for-each select="$setOfchildGroup[generate-id(.) = generate-id(key('state-group', subparent/state))]">
            
                <tr>							
                    <td colspan="2">                      
                        <div class="erp-toc-header2">
                            <xsl:value-of select="subparent/state"/> 
                        </div>
                    </td>
                </tr>
            
            <xsl:variable name="stateGroup" select="key('state-group', subparent/state)"/>
                
            <xsl:for-each select="$stateGroup[generate-id(.) = generate-id(key('city-group', subparent/city))]">
                <tr>							
                    <td colspan="2">
                        <div class="erp-toc-header3">
                            <xsl:value-of select="subparent/city"/> 
                        </div>
                    </td>
                </tr>
                </xsl:for-each>
        </xsl:for-each>
    </xsl:for-each>

</xsl:template>
</xsl:stylesheet>
