This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Re: getting all nodes from a certain level in the xml hierarchy
- From: "Michael Kay" <michael dot h dot kay at ntlworld dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Fri, 27 Sep 2002 14:45:29 +0100
- Subject: RE: [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.
Looks like an Oracle bug. If the second argument to key() is a number,
it should convert it to a string, not to a node-set. You could probably
circumvent it by converting explicitly to a string using the string()
function.
Michael Kay
Software AG
home: Michael.H.Kay@ntlworld.com
work: Michael.Kay@softwareag.com
>
>
> -----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
>
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list