|
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 |