xsl-list
[Top] [All Lists]

Re: [xsl] Subject: Counting Path Occurrences

2007-04-03 19:11:45
On 4/1/07, Mukul Gandhi <gandhi(_dot_)mukul(_at_)xxxxxxxxx> wrote:
On 3/30/07, Andrew Welch <andrew(_dot_)j(_dot_)welch(_at_)xxxxxxxxx> wrote:

   <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>


Nice solution.

Except, if we change slightly the concat to following (please note a
starting '/'):
concat('&#xa;', '/', ., ' - ', count(current-group()))


We'll get exactly what the OP wants.


So, just to make sure I understand this right, for each descendent node,
you use this string-join function to build the full path via the
ancestors:

 -- string-join(ancestor-or-self::*/name(), '/')

Since you're doing this in the select clause of the for-each-group, the
things to be grouped are already the desired paths, so you just group-by
".".  And for the same reason, you can use "." in the concat clause to
format the output.

I would also get the same result by separating things like this, right?

<xsl:for-each-group select="//*"
group-by="string-join(ancestor-or-self::*/name(), '/')">
[blah....]
</xsl:for-each-group>

Guys, this is terrific.  Thanks very much for the prompt replies.

Scott

--~------------------------------------------------------------------
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>