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 |