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('
', ., ' - ',
count(current-group()))"/>
</xsl:for-each-group>
Nice solution.
Except, if we change slightly the concat to following (please note a
starting '/'):
concat('
', '/', ., ' - ', 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>
--~--