Grouping using XSLT 1.0

Tag: xslt , xslt-grouping Author: xiaowang_lin Date: 2010-07-26

My XML looks like

 <xml version="1.0" standalone="no"> 
 <Alerts AlertsName="">
 <Alert UserId="13" OwnerId="13" OwnerName="jasprice" OwnerEmail="[email protected]" Scope="I">
 <Assets>
 <Asset>
 <AssetTaxonamy>
 <AssetTopics>
  <AssetTopic Type="Global business">Globalisation</AssetTopic> 
  </AssetTopics>
  </AssetTaxonamy>
  <AssetTitle>Doing it the Chinese way: Disney's strategy for a lucrative ride in China</AssetTitle> 
  <AssetDescription>FROM INSEAD KNOWLEDGE As trite as the phrase ?think global, act local? may be, it nevertheless encapsulates The Walt Disney Company?s approach to making a success of its business in China. To that end, producing content that has a cultural and emotional resonance with Chinese consumers is crucial, says Stanley Cheung, Disney?s managing director for Greater China. ?We see it in China today, that ...</AssetDescription> 
  <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=467282231</AssetLink> 
  <AssetPubDate>7/23/2010</AssetPubDate> 
  <AssetArrivalDate>8/9/2010</AssetArrivalDate> 
  <AssetSource>Executive briefings / whitepapers</AssetSource> 
  </Asset>
 <Asset>
 <AssetTaxonamy>
 <AssetTopics>
  <AssetTopic Type="Sales and marketing">Marketing effectiveness</AssetTopic> 
  </AssetTopics>
  </AssetTaxonamy>
  <AssetTitle>The empowered sales team: Enhancing productivity through thebetter use of information</AssetTitle> 
  <AssetDescription>FROM THE ECONOMIST INTELLIGENCE UNIT Sponsored by Microsoft Introduction Sales professionals create value by transforming their company?s raw product or service into a tailored solution for a customer?s needs. In a setting where customers have access to an unprecedented amount of product information, this is an increasingly challenging task. To thrive in this environment, companies...</AssetDescription> 
  <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=1297294514</AssetLink> 
  <AssetPubDate>7/23/2010</AssetPubDate> 
  <AssetArrivalDate>8/9/2010</AssetArrivalDate> 
  <AssetSource>Executive briefings / whitepapers</AssetSource> 
  </Asset>
 <Asset>
 <AssetTaxonamy>
 <AssetTopics>
  <AssetTopic Type="Sales and marketing">Customer management</AssetTopic> 
  </AssetTopics>
  </AssetTaxonamy>
  <AssetTitle>On the front lines: The role of information in enhancing customer service</AssetTitle> 
  <AssetDescription>FROM THE ECONOMIST INTELLIGENCE UNIT Sponsored by Microsoft Introduction Customer service professionals play a critical role in most companies because they are the people customers are most often in contact with, especially when problems arise. In today?s unsettled market environment, the ability to build a deep understanding of evolving customer needs and expectations can make a com...</AssetDescription> 
  <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=1327294517</AssetLink> 
  <AssetPubDate>7/23/2010</AssetPubDate> 
  <AssetArrivalDate>8/9/2010</AssetArrivalDate> 
  <AssetSource>Executive briefings / whitepapers</AssetSource> 
  </Asset>
 <Asset>
 <AssetTaxonamy>
 <AssetTopics>
  <AssetTopic Type="Leadership">Managing change</AssetTopic> 
  </AssetTopics>
  </AssetTaxonamy>
  <AssetTitle>World of leaders</AssetTitle> 
  <AssetDescription>FROM INDIAN SCHOOL OF BUSINESS At the inaugural ?ISB World of Leaders? speaker series event hosted by the Indian School of Business (ISB), Henry R Kravis, Co-Founder, Co-Chairman and Co-CEO, Kohlberg Kravis Roberts &amp; Company (KKR), New York, interacted with a select group of Indian business leaders about how he started his enterprise, the journey so far and his views on the private equity industr...</AssetDescription> 
  <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=1757259560</AssetLink> 
  <AssetPubDate>7/23/2010</AssetPubDate> 
  <AssetArrivalDate>8/9/2010</AssetArrivalDate> 
  <AssetSource>Executive briefings / whitepapers</AssetSource> 
  </Asset>
 <Asset>
 <AssetTaxonamy>
 <AssetTopics>
  <AssetTopic Type="Global business">Country strategies</AssetTopic> 
  </AssetTopics>
  </AssetTaxonamy>
  <AssetTitle>State industries in Lithuania: Follow the money</AssetTitle> 
  <AssetDescription>State-owned enterprises in eastern Europe are often a mess. Lithuania is trying to reform them DIG into the political undergrowth anywhere between the Baltic and the Black Seas and you soon find curious connections between state-owned enterprises, officials and politicians. They mostly escape public scrutiny--not least because politicians of all stripes tend to benefit from the state firms? large...</AssetDescription> 
  <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=67277991</AssetLink> 
  <AssetPubDate>7/23/2010</AssetPubDate> 
  <AssetArrivalDate>8/9/2010</AssetArrivalDate> 
  <AssetSource>Executive briefings / whitepapers</AssetSource> 
  </Asset>
</Assets>
</Alert>
</Alerts>

Now we need to group assets by first Type attribute (ex globalisation) and then need to group by value (ex Country stratagies). We need to display Globalisation and Country stratagies once only and need to display all assets below that. I can do it with XSLT 2.0 easily with but it is not supported with Microsoft .net so can't use.

Can anyone help me here?

Thanks in advance.

Please take more care when pasting code - at least format it for readability and no directly from IE.
Thanks. changed.
Good question (+1). See my answer for a complete and efficient XSLT 1.0 solution.

Best Answer

This transformation:

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

 <xsl:key name="kAssetByTypeName" match="Asset"
  use="AssetTaxonamy/AssetTopics/AssetTopic[1]/@Type"/>

 <xsl:key name="kAssetByTypeNameValue" match="Asset"
  use="concat(AssetTaxonamy/AssetTopics/AssetTopic[1]/@Type,
              AssetTaxonamy/AssetTopics/AssetTopic[1]
              )
  "/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="Assets">
   <Assets>
     <xsl:for-each select=
     "Asset[generate-id()
           =
            generate-id(key('kAssetByTypeName',
                            AssetTaxonamy/AssetTopics
                                       /AssetTopic[1]/@Type
                            )
                            [1]
                        )
           ]
     ">
      <xsl:variable name="vcurType" select=
       "AssetTaxonamy/AssetTopics/AssetTopic[1]/@Type"/>

       <Topic Type="{$vcurType}">
          <xsl:for-each select=
           "key('kAssetByTypeName',$vcurType)
                [generate-id()
                =
                 generate-id(key('kAssetByTypeNameValue',
                                  concat($vcurType,
                                         AssetTaxonamy/AssetTopics/AssetTopic[1]
                                         )
                                 )[1]
                             )
                ]
           ">
             <xsl:variable name="vSubject" select=
              "AssetTaxonamy/AssetTopics/AssetTopic[1]"/>

             <Subject>
               <xsl:value-of select="$vSubject"/>
             </Subject>

             <xsl:apply-templates select=
              "key('kAssetByTypeNameValue',
                    concat($vcurType, $vSubject)
                   )
              "/>
          </xsl:for-each>
       </Topic>
     </xsl:for-each>
   </Assets>
 </xsl:template>
</xsl:stylesheet>

when applied on the provided (corrected to be well-formed) XML document:

<Alerts AlertsName="">
    <Alert UserId="13" OwnerId="13" OwnerName="jasprice" OwnerEmail="[email protected]" Scope="I">
        <Assets>
            <Asset>
                <AssetTaxonamy>
                    <AssetTopics>
                        <AssetTopic Type="Global business">Globalisation</AssetTopic>
                    </AssetTopics>
                </AssetTaxonamy>
                <AssetTitle>Doing it the Chinese way: Disney's strategy for a lucrative ride in China</AssetTitle>
                <AssetDescription>FROM INSEAD KNOWLEDGE As trite as the phrase ?think global, act local? may be, it nevertheless encapsulates The Walt Disney Company?s approach to making a success of its business in China. To that end, producing content that has a cultural and emotional resonance with Chinese consumers is crucial, says Stanley Cheung, Disney?s managing director for Greater China. ?We see it in China today, that ...</AssetDescription>
                <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=467282231</AssetLink>
                <AssetPubDate>7/23/2010</AssetPubDate>
                <AssetArrivalDate>8/9/2010</AssetArrivalDate>
                <AssetSource>Executive briefings / whitepapers</AssetSource>
            </Asset>
            <Asset>
                <AssetTaxonamy>
                    <AssetTopics>
                        <AssetTopic Type="Sales and marketing">Marketing effectiveness</AssetTopic>
                    </AssetTopics>
                </AssetTaxonamy>
                <AssetTitle>The empowered sales team: Enhancing productivity through thebetter use of information</AssetTitle>
                <AssetDescription>FROM THE ECONOMIST INTELLIGENCE UNIT Sponsored by Microsoft Introduction Sales professionals create value by transforming their company?s raw product or service into a tailored solution for a customer?s needs. In a setting where customers have access to an unprecedented amount of product information, this is an increasingly challenging task. To thrive in this environment, companies...</AssetDescription>
                <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=1297294514</AssetLink>
                <AssetPubDate>7/23/2010</AssetPubDate>
                <AssetArrivalDate>8/9/2010</AssetArrivalDate>
                <AssetSource>Executive briefings / whitepapers</AssetSource>
            </Asset>
            <Asset>
                <AssetTaxonamy>
                    <AssetTopics>
                        <AssetTopic Type="Sales and marketing">Customer management</AssetTopic>
                    </AssetTopics>
                </AssetTaxonamy>
                <AssetTitle>On the front lines: The role of information in enhancing customer service</AssetTitle>
                <AssetDescription>FROM THE ECONOMIST INTELLIGENCE UNIT Sponsored by Microsoft Introduction Customer service professionals play a critical role in most companies because they are the people customers are most often in contact with, especially when problems arise. In today?s unsettled market environment, the ability to build a deep understanding of evolving customer needs and expectations can make a com...</AssetDescription>
                <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=1327294517</AssetLink>
                <AssetPubDate>7/23/2010</AssetPubDate>
                <AssetArrivalDate>8/9/2010</AssetArrivalDate>
                <AssetSource>Executive briefings / whitepapers</AssetSource>
            </Asset>
            <Asset>
                <AssetTaxonamy>
                    <AssetTopics>
                        <AssetTopic Type="Leadership">Managing change</AssetTopic>
                    </AssetTopics>
                </AssetTaxonamy>
                <AssetTitle>World of leaders</AssetTitle>
                <AssetDescription>FROM INDIAN SCHOOL OF BUSINESS At the inaugural ?ISB World of Leaders? speaker series event hosted by the Indian School of Business (ISB), Henry R Kravis, Co-Founder, Co-Chairman and Co-CEO, Kohlberg Kravis Roberts &amp; Company (KKR), New York, interacted with a select group of Indian business leaders about how he started his enterprise, the journey so far and his views on the private equity industr...</AssetDescription>
                <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=1757259560</AssetLink>
                <AssetPubDate>7/23/2010</AssetPubDate>
                <AssetArrivalDate>8/9/2010</AssetArrivalDate>
                <AssetSource>Executive briefings / whitepapers</AssetSource>
            </Asset>
            <Asset>
                <AssetTaxonamy>
                    <AssetTopics>
                        <AssetTopic Type="Global business">Country strategies</AssetTopic>
                    </AssetTopics>
                </AssetTaxonamy>
                <AssetTitle>State industries in Lithuania: Follow the money</AssetTitle>
                <AssetDescription>State-owned enterprises in eastern Europe are often a mess. Lithuania is trying to reform them DIG into the political undergrowth anywhere between the Baltic and the Black Seas and you soon find curious connections between state-owned enterprises, officials and politicians. They mostly escape public scrutiny--not least because politicians of all stripes tend to benefit from the state firms? large...</AssetDescription>
                <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=67277991</AssetLink>
                <AssetPubDate>7/23/2010</AssetPubDate>
                <AssetArrivalDate>8/9/2010</AssetArrivalDate>
                <AssetSource>Executive briefings / whitepapers</AssetSource>
            </Asset>
        </Assets>
    </Alert>
</Alerts>

produces the wanted grouping:

<Alerts AlertsName="">
   <Alert UserId="13" OwnerId="13" OwnerName="jasprice" OwnerEmail="[email protected]" Scope="I">
      <Assets>
         <Topic Type="Global business">
            <Subject>Globalisation</Subject>
            <Asset>
               <AssetTaxonamy>
                  <AssetTopics>
                     <AssetTopic Type="Global business">Globalisation</AssetTopic>
                  </AssetTopics>
               </AssetTaxonamy>
               <AssetTitle>Doing it the Chinese way: Disney's strategy for a lucrative ride in China</AssetTitle>
               <AssetDescription>FROM INSEAD KNOWLEDGE As trite as the phrase ?think global, act local? may be, it nevertheless encapsulates The Walt Disney Company?s approach to making a success of its business in China. To that end, producing content that has a cultural and emotional resonance with Chinese consumers is crucial, says Stanley Cheung, Disney?s managing director for Greater China. ?We see it in China today, that ...</AssetDescription>
               <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=467282231</AssetLink>
               <AssetPubDate>7/23/2010</AssetPubDate>
               <AssetArrivalDate>8/9/2010</AssetArrivalDate>
               <AssetSource>Executive briefings / whitepapers</AssetSource>
            </Asset>
            <Subject>Country strategies</Subject>
            <Asset>
               <AssetTaxonamy>
                  <AssetTopics>
                     <AssetTopic Type="Global business">Country strategies</AssetTopic>
                  </AssetTopics>
               </AssetTaxonamy>
               <AssetTitle>State industries in Lithuania: Follow the money</AssetTitle>
               <AssetDescription>State-owned enterprises in eastern Europe are often a mess. Lithuania is trying to reform them DIG into the political undergrowth anywhere between the Baltic and the Black Seas and you soon find curious connections between state-owned enterprises, officials and politicians. They mostly escape public scrutiny--not least because politicians of all stripes tend to benefit from the state firms? large...</AssetDescription>
               <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=67277991</AssetLink>
               <AssetPubDate>7/23/2010</AssetPubDate>
               <AssetArrivalDate>8/9/2010</AssetArrivalDate>
               <AssetSource>Executive briefings / whitepapers</AssetSource>
            </Asset>
         </Topic>
         <Topic Type="Sales and marketing">
            <Subject>Marketing effectiveness</Subject>
            <Asset>
               <AssetTaxonamy>
                  <AssetTopics>
                     <AssetTopic Type="Sales and marketing">Marketing effectiveness</AssetTopic>
                  </AssetTopics>
               </AssetTaxonamy>
               <AssetTitle>The empowered sales team: Enhancing productivity through thebetter use of information</AssetTitle>
               <AssetDescription>FROM THE ECONOMIST INTELLIGENCE UNIT Sponsored by Microsoft Introduction Sales professionals create value by transforming their company?s raw product or service into a tailored solution for a customer?s needs. In a setting where customers have access to an unprecedented amount of product information, this is an increasingly challenging task. To thrive in this environment, companies...</AssetDescription>
               <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=1297294514</AssetLink>
               <AssetPubDate>7/23/2010</AssetPubDate>
               <AssetArrivalDate>8/9/2010</AssetArrivalDate>
               <AssetSource>Executive briefings / whitepapers</AssetSource>
            </Asset>
            <Subject>Customer management</Subject>
            <Asset>
               <AssetTaxonamy>
                  <AssetTopics>
                     <AssetTopic Type="Sales and marketing">Customer management</AssetTopic>
                  </AssetTopics>
               </AssetTaxonamy>
               <AssetTitle>On the front lines: The role of information in enhancing customer service</AssetTitle>
               <AssetDescription>FROM THE ECONOMIST INTELLIGENCE UNIT Sponsored by Microsoft Introduction Customer service professionals play a critical role in most companies because they are the people customers are most often in contact with, especially when problems arise. In today?s unsettled market environment, the ability to build a deep understanding of evolving customer needs and expectations can make a com...</AssetDescription>
               <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=1327294517</AssetLink>
               <AssetPubDate>7/23/2010</AssetPubDate>
               <AssetArrivalDate>8/9/2010</AssetArrivalDate>
               <AssetSource>Executive briefings / whitepapers</AssetSource>
            </Asset>
         </Topic>
         <Topic Type="Leadership">
            <Subject>Managing change</Subject>
            <Asset>
               <AssetTaxonamy>
                  <AssetTopics>
                     <AssetTopic Type="Leadership">Managing change</AssetTopic>
                  </AssetTopics>
               </AssetTaxonamy>
               <AssetTitle>World of leaders</AssetTitle>
               <AssetDescription>FROM INDIAN SCHOOL OF BUSINESS At the inaugural ?ISB World of Leaders? speaker series event hosted by the Indian School of Business (ISB), Henry R Kravis, Co-Founder, Co-Chairman and Co-CEO, Kohlberg Kravis Roberts &amp; Company (KKR), New York, interacted with a select group of Indian business leaders about how he started his enterprise, the journey so far and his views on the private equity industr...</AssetDescription>
               <AssetLink>http://viewswire.eiu.com/index.asp?layout=EBArticleVW3&amp;article_id=1757259560</AssetLink>
               <AssetPubDate>7/23/2010</AssetPubDate>
               <AssetArrivalDate>8/9/2010</AssetArrivalDate>
               <AssetSource>Executive briefings / whitepapers</AssetSource>
            </Asset>
         </Topic>
      </Assets>
   </Alert>
</Alerts>

Do note: The use of the Muenchian method for grouping.

comments:

Great Answer Dimitre. But issue here is, i have XML and my i will just do XSLT transformation and it should generated desired HTML. Your answer is perfect but it will add one more step in processing which i can't fit with my business solution. Can you suggest one more?
We need HTML output like <html> <body> <table> <tr> Global Business </tr> <tr>Country Strategies</tr> <tr>AssetTitle1</tr> <tr>AssetDescp1</tr> <tr>AssetTitle2</tr> <tr>AssetDescp2</tr> <tr>Globalisation</tr> <tr>AssetTitle1</tr> <tr>AssetDescp1</tr> <tr>AssetTitle2</tr> <tr>AssetDescp2</tr> </table> </body> </html> Same way for other groups...........
@jatin: I have solved your problem -- the nested grouping. This group is not about HTML. In case you don't know what HTML to use -- just ask the people in the HTML group. Your XSLT question has been completely answered. Not to mention that you never mentioned in your original question that you needed HTML output!!!
Dimitre, i can take care of HTML. But when i try to put nodes into <tr> between those two <XSL:For-each> statements, it don't give me all nodes.
What is the use of following? <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template>