RE: [xsl] Select Deepest Node only in Iteration

Subject: RE: [xsl] Select Deepest Node only in Iteration
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 12 Jul 2007 16:08:26 +0100
The simplest change to your code is to add an xsl:sort to your for-each that
sorts the matching nodes by descending depth. That's <xsl:sort
select="count(ancestor::node)" order="descending"/>. Then you can return a
value only when position()=1. 

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: J. Zhang [mailto:j.zhang@xxxxxx] 
> Sent: 12 July 2007 15:47
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Select Deepest Node only in Iteration
> 
> I have already checked the XSL FAQ at 
> http://www.dpawson.co.uk/ and explored the history of this 
> mailinglist. I could not find the answer, that is why I am 
> posting here.
> 
> I am matching the content of XML elements this way in a 
> for-each iteration:
> 
> xsl:if test="matches(string(self::node()), concat('\W', 
> $term, '\W'), 'im')">
> 
> I return the absolute path where $term occurs in the 
> transformation. The result after the transformation is for 
> example this for Word 1:
> 
> //article
> 
> //article/body[1]
> 
> //article/body[1]/section[6]
> 
> //article/body[1]/section[6]/normallist[6]
> 							
> //article/body[1]/section[6]/normallist[6]/item[1]
> 
> The problem is that I only want the longest path, e.g. the 
> deepest node of this leave. I need to set a condition that 
> only returns something when the for-each iteration has come 
> to the longest path of this leave, but I could not find a way 
> to do this.
> 
> Any help would be greatly appreciated! Thanks!

Current Thread