[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Add numbers


Subject: Re: [xsl] Add numbers
From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx>
Date: Tue, 9 Oct 2007 22:48:22 +0530

If you follow this link,
http://www.biglist.com/lists/xsl-list/archives/200005/msg00270.html
(which Steve Muench posted to this list in yr 2000 introducing the
Muenchian method), where it's suggested we should use [1].

Though as you say, the stylesheet will work without [1] also.

I prefer using something, which has become a kind of pattern.

On 10/9/07, Scott Trenda <Scott.Trenda@xxxxxxxx> wrote:
> 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


-- 
Regards,
Mukul Gandhi


Current Thread
Keywords