xsl-list
[Top] [All Lists]

RE: calculate depth of an xml-tree

2003-04-22 06:23:49
<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



<Prev in Thread] Current Thread [Next in Thread>