This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
AW: Re: getting all nodes from a certain level in the xml hierarchy
- From: "Peter Menzel" <mai00bfy at studserv dot uni-leipzig dot de>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Fri, 27 Sep 2002 14:19:47 +0200
- Subject: AW: [xsl] Re: getting all nodes from a certain level in the xml hierarchy
- Reply-to: xsl-list at lists dot mulberrytech dot com
When i try this, I get a "Cannot convert number to NodeSet" Error...
I use the Oracle XSLProcessor Classes.
-----Ursprungliche Nachricht-----
Von: owner-xsl-list@lists.mulberrytech.com
[mailto:owner-xsl-list@lists.mulberrytech.com]Im Auftrag von Dimitre
Novatchev
Gesendet: Freitag, 27. September 2002 12:46
An: xsl-list@lists.mulberrytech.com
Betreff: [xsl] Re: getting all nodes from a certain level in the xml
hierarchy
Here's a simple solution using the Muenchian method for grouping:
source xml (provided by you):
----------------------------
<Folder NAME="/">
<Folder NAME="a"/>
<Folder NAME="b">
<Folder NAME="ba"/>
<Folder NAME="bb"/>
</Folder>
<Folder NAME="z">
<Folder NAME="za">
<Folder NAME="very deep folder"/>
</Folder>
</Folder>
</Folder>
stylesheet:
----------
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="kDepth" match="Folder"
use="count(ancestor::*)" />
<xsl:template match="/">
<xsl:for-each select="//Folder
[
generate-id()
=
generate-id(key('kDepth',
count(ancestor::*)
)[1]
)
]">
<xsl:value-of select="concat('Level ',
count(ancestor::*),
': '
)"/>
<xsl:for-each select="key('kDepth',count(ancestor::*))">
<xsl:value-of select="concat(@NAME, '; ')"/>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Result:
------
Level 0: /;
Level 1: a; b; z;
Level 2: ba; bb; za;
Level 3: very deep folder;
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list