Re: [xsl] Subject: Counting Path Occurrences

Subject: Re: [xsl] Subject: Counting Path Occurrences
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Fri, 30 Mar 2007 11:48:09 +0100
On 3/30/07, Scott Coon <scoon@xxxxxxxxxxxxx> wrote:

Hi - I'm trying to write a generic stylesheet to count occurrences of full paths to elements. For example, I'd like input like this:

<a>
        <b>
                <x>
                        <w>blah</w>
                </x>
                <y>bleh</y>
        </b>
        <b>
                <x>
                        <w>blih</w>
                </x>
                <x>
                        <w>bloh</w>
                </x>
        </b>
        <c>
                <w>blwh</w>
                <w>blyh</w>
        </c>
</a>

To generate this output:

/a - 1
/a/b - 2
/a/b/x - 3
/a/b/x/w - 3
/a/b/y - 1
/a/c - 1
/a/c/w - 2

This for-each-group


 <xsl:for-each-group
   select="//*/string-join(ancestor-or-self::*/name(), '/')"
   group-by=".">
	<xsl:sequence select="concat('&#xa;', ., ' - ', count(current-group()))"/>
 </xsl:for-each-group>

give this result:

a - 1
a/b - 2
a/b/x - 3
a/b/x/w - 3
a/b/y - 1
a/c - 1
a/c/w - 2

cheers
andrew

Current Thread