[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Counting level of nodes beneath current (in XPATH)

Subject: Re: [xsl] Counting level of nodes beneath current (in XPATH)
From: David Carlisle <davidc@xxxxxxxxx>
Date: Tue, 11 Jan 2005 13:53:16 GMT

> The solution is not near what I hoped as it seems to be very slow.

Speed's all relative, it took 300 years to solve Fermat's last theorem.
Why is everyone in such a rush these days:-)

There are various things you can do to speed it up eg change
 <xsl:for-each select=".//Y">
 <xsl:for-each select=".//Y[not(X/Y)]">

so you only count the ancestors on the leaf Y nodes. also sorting all
the nodes into order and taking the last is far from being the quickest
way of finding the maximum (all the time taken sorting the rest of the
list is wasted) just the least amount of code.

Also you probably don't need this number explictly. for example 
if $lv=2 then an identity transform plus the template

<xsl:template match="X[not(Y/X/Y)]"/>

is all you need so an alternative strategy would be to take the
parameter and as a first pass generate a stylesheet that just has a
single template as above, and imports an identity transform, then run
that generated stylesheet.


This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:

Current Thread