This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
AW: 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 12:14:52 +0200
- Subject: AW: [xsl] getting all nodes from a certain level in the xml hierarchy
- Reply-to: xsl-list at lists dot mulberrytech dot com
Yes, I need a HTML table with just one row.
All nodes of the same level are in one <td>, seperated by <br/>.
-----Ursprüngliche Nachricht-----
Von: owner-xsl-list@lists.mulberrytech.com
[mailto:owner-xsl-list@lists.mulberrytech.com]Im Auftrag von Martin
Lormes
Gesendet: Freitag, 27. September 2002 11:38
An: xsl-list@lists.mulberrytech.com
Betreff: Re: [xsl] getting all nodes from a certain level in the xml
hierarchy
> my problem is the following:
> my XML document maps the structure of a folder tree (just like the unix
file
> hierarchy) but without files, e.g.:
>
> <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>
>
> The real folder NAMEs are like real folder names, and have no specific
> length or content.
> The depth of the deepest node is unknown.
>
> I need to access all nodes that have the same depth.
> So first i need root, then all direct childs of root, then all nodes that
> are two levels under root, because i want tu put them in a table like:
>
> level | 0 | 1 | 2 ... x
> ------+---+-----+------ ---------------
> | / | a | ba very deep folder
> | | b | bb
> ...
> | | z | za
>
> first I started to try <xsl:for-each select="//Folder"> and then
> <xsl:for-each select="//Folder/Folder"> but because I do not know the
depth
> of the tree, this won't work..
Another reason, why this wouldn't work: "//Folder" selects all folders at
any tree level. "//Folder/Folder selects alls folders which have a parent
folder.
> Can anybody help me, what is the direction i should go?
> I don't think there is an easy way to use XPath for adressing nodes on the
> same level?
In General "/*/*/*/*" selects all nodes at the fourth level, for instance.
However I can't yet think of a single transformation that could possibly
yield such a list. Do you really want text-output? Or do you want an HTML
table? If it helps to have an intermediate document containing a simple list
of Folders with their level in an attribute value, you can use:
<xsl:for-each select="//Folder">
<Folder NAME="{@NAME}" LEVEL="{count(ancestor::*)}"/>
</xsl:for-each>
It should be rather easy to build your table from this intermediate
structure.
Martin Lormes
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list