RE: [xsl] Add numbers

Subject: RE: [xsl] Add numbers
From: "Scott Trenda" <Scott.Trenda@xxxxxxxx>
Date: Tue, 9 Oct 2007 11:33:08 -0500
Quick comment, Harsh himself pointed this out recently.

In your Muenchian grouping condition:
	generate-id() = generate-id(key('x', @key)[1])
The [1] is actually redundant, as generate-id() will only take the first
node returned. So you can use this:
	generate-id() = generate-id(key('x', @key))

~ Scott


-----Original Message-----
From: Mukul Gandhi [mailto:gandhi.mukul@xxxxxxxxx]
Sent: Tuesday, October 09, 2007 11:25 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Add numbers

Hi Harsh,
  Though the question has already been answered, but here's my attempt:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">

 <xsl:output method="xml" indent="yes" />

 <xsl:key name="x" match="a" use="@key" />

 <xsl:template match="/first">
   <op>
     <xsl:for-each select="second/a[generate-id() =
generate-id(key('x', @key)[1])]">
       <xsl:element name="{@key}">
         <val><xsl:value-of select="sum(key('x', @key)/@val)" /></val>
       </xsl:element>
     </xsl:for-each>
   </op>
 </xsl:template>

</xsl:stylesheet>

Ken's solution is quite generic, because it doesn't depend on element
name, and can work with deep hierarchies.

On 10/9/07, Chaudhary, Harsh <HCHAUDHA@xxxxxxxxx> wrote:
> Hi,
>
> I have an XML:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <first>
>    <second>
>        <a val="4" key="one">b</a>
>        <a val="2" key="two">b</a>
>    </second>
>    <second>
>        <a val="3" key="one">c</a>
>    </second>
> </first>
>
> I need to group together the nodes which have the same key and then I
> need to add the attribute "val" in all such cases.
>
> So, The output I need is:
>
> <op>
>        <one>
>                <val>7</val>
>        </one>
>        <two>
>                <val>2</val>
>        </two>
> </op>
>
> How do I go about doing this? I am using Xalan and XSLT 1.0.
>
> I have used the Meunichian method to group the nodes with same keys
> together. But I don't know how to proceed from there. I tried using
the
> sum() function but it won't work for me on account that even if I run
a
> for-each loop over the set of nodes with the same key, it just prints
> out the value of "val" for each a element. I think I need to be in the
> parent element for this to work.
>
> Thanks,
> Harsh.


--
Regards,
Mukul Gandhi

Current Thread