RE: [xsl] calculate depth of an xml-tree

Subject: RE: [xsl] calculate depth of an xml-tree
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Tue, 22 Apr 2003 14:23:49 +0100
<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@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
> Florian Bauer
> Sent: 22 April 2003 12:24
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> 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


Current Thread