[Top] [All Lists]

Re: [xsl] Add numbers

2007-10-09 10:19:06
If you follow this link,
(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(_dot_)Trenda(_at_)oati(_dot_)net> 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(_dot_)mukul(_at_)gmail(_dot_)com]
Sent: Tuesday, October 09, 2007 11:25 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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";

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

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

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


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(_at_)amfam(_dot_)com> wrote:

I have an XML:

<?xml version="1.0" encoding="UTF-8"?>
       <a val="4" key="one">b</a>
       <a val="2" key="two">b</a>
       <a val="3" key="one">c</a>

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:


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
sum() function but it won't work for me on account that even if I run
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.


Mukul Gandhi

Mukul Gandhi

XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>

<Prev in Thread] Current Thread [Next in Thread>