| 
 
Subject: Re: [xsl] grouping and counting of elements From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx> Date: Sat, 21 Apr 2007 22:04:08 +0530  | 
Hi Leonid, Below is a XSLT 2.0 solution for this:
 <xsl:template match="/">
   <Totals>
     <xsl:for-each select="All_Results/Result[1]/*">
       <xsl:variable name="name" select="name()" />
       <xsl:element name="{$name}">
         <xsl:for-each-group select="../../Result/*[name() = $name]"
group-by=".">
           <xsl:if test="not(normalize-space(.) = '')">
             <Tag value="{.}" count="{count(current-group())}" />
           </xsl:if>
         </xsl:for-each-group>
       </xsl:element>
     </xsl:for-each>
   </Totals>
 </xsl:template><All_Results>
 <Result>
    <Name>John</Name>
    <Country>UK</Country>
    <!-- other upto 100 elements -->
    <Color>Red</Color>
 </Result>
 <Result>
    <Name>John</Name>
    <Country>US</Country>
    <!-- other upto 100 elements -->
    <Color>Green</Color>
 </Result>
 <Result>
    <Name>Thomas</Name>
    <Country>Estonia</Country>
    <!-- other upto 100 elements -->
    <Color>
    </Color>
 </Result>
 <Result>
    <Name>
    </Name>
    <Country>UK</Country>
    <!-- other upto 100 elements -->
    <Color>Red</Color>
 </Result>
</All_Results><?xml version="1.0" encoding="UTF-8"?>
<Totals>
  <Name>
     <Tag value="John" count="2"/>
     <Tag value="Thomas" count="1"/>
  </Name>
  <Country>
     <Tag value="UK" count="2"/>
     <Tag value="US" count="1"/>
     <Tag value="Estonia" count="1"/>
  </Country>
  <Color>
     <Tag value="Red" count="2"/>
     <Tag value="Green" count="1"/>
  </Color>
</Totals>Hi experts, I have seen similar questions to mine, yet didn't find a good mach. Please point to the right thread if exists. I have a source Xml:
<All_Results> <Result> <Name>John</Name> <Country>UK</Country> <!-- other upto 100 elements --> <Color>Red</Color> </Result> <Result> <Name>John</Name> <Country>US</Country> <!-- other upto 100 elements --> <Color>Green</Color> </Result> <Result> <Name>Thomas</Name> <Country>Estonia</Country> <!-- other upto 100 elements --> <Color> </Color> </Result> <Result> <Name> </Name> <Country>UK</Country> <!-- other upto 100 elements --> <Color>Red</Color> </Result> </All_Results>
Each <Result> has the same list of sub-elements, some might not have a text value
I want to aggregate and get something like this:
<Totals> <Name> <Tag value="John" count="2" /> <Tag value="Thomas" count="1" /> </Name> <Country> <Tag value="UK" count="2" /> <Tag value="US" count="1" /> <Tag value="Estonia" count="1" /> </Country> <Color> <Tag value="Red" count="2" /> <Tag value="Green" count="1" /> </Color> <!-- other elements grouped by element name, sorted by total of element values--> </Totals>
Please advice. Thanks, Leonid
-- Regards, Mukul Gandhi
| Current Thread | 
|---|
  | 
| <- Previous | Index | Next -> | 
|---|---|---|
| [xsl] Re: grouping and counting of , Leonid Lyublinski | Thread | Re: [xsl] grouping and counting of , Andrew Welch | 
| [xsl] Re: grouping and counting of , Leonid Lyublinski | Date | Re: [xsl] grouping and counting of , Andrew Welch | 
| Month |