<xsl:for-each select="//*">
<xsl:sort select="count(ancestor-or-self::*)" data-type="number"/>
<xsl:if test="position()=last()">
<xsl:value-of select="count(ancestor-or-self::*)"/>
</xsl:if>
</xsl:for-each>
Or in 2.0:
max(for $n in //* return count($n/ancestor-or-self::*))
You can possibly speed it up a little by excluding non-leaf elements, or
by using a recursive template that supplies the depth of a node as a
parameter, avoiding the need to count ancestors of every node.
Michael Kay
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
Florian Bauer
Sent: 22 April 2003 12:24
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] calculate depth of an xml-tree
hi
and now my 2nd (and hopefully last) question for today ...
I have to write an xsl file, which calculates the maximal depth of an
input xml file.
<abc>
<cde>
<efg/>
<asd/>
</cde>
<aaa/>
</abc>
=> maxdepth = 3 ....
I think I have to use a "for each" with sorting and increment a
variable, but I don't know how to do this (you see, I'm a big noob @
xml/xsl :( ... )
would be great if someone could help me.
cya Florian Bauer
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list