RE: [xsl] Using XPATH axis within a recursive structure to match a descendent node

Subject: RE: [xsl] Using XPATH axis within a recursive structure to match a descendent node
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 21 Feb 2005 15:40:28 -0000
In XPath 2.0,

.//load except .//gui//load

or 

for $this in . return $this//load[ancestor::gui[1] is $this]

This is a peculiar construct needed because XPath does not have real
variables; in XQuery you could write

let $this := .
return $this//load[ancestor::gui[1] is $this]

In XSLT (1.0 or 2.0) you could write

.//load[ancestor::gui[1] is current()]


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



 

> -----Original Message-----
> From: ben senior [mailto:ben@xxxxxxxxxxxxx] 
> Sent: 21 February 2005 15:15
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Using XPATH axis within a recursive structure 
> to match a descendent node
> 
> I'm afraid I couldn't think of a better title!
> 
> Take a look at the xml below. The goal is to match the load tags of 0 
> and 1, but NOT 2.
> I need an expression which matches ALL load tags that are 
> descendents of 
> the current gui tag, but not contained within descendent gui 
> tags! Does 
> that make sense to anybody?
> 
> i.e. descendant::load will also match 2, which I do not want. 
> How might 
> I approach this? Any ideas?
> 
> <gui>
>     <load>                                        
> ........................*0
>        something
>     </load>
>     <p> blah
>           <b>
>                 blah
>                    <load>                                 
> ........................*1
>                       else
>                    </load>
>                    <gui>
>                          <load>                                 
> ........................*2
>                             <again
>                          </load>
>                    </gui>
>           </b>
>     </p>
> </gui>
> 
> Kindest Regards,
> 
> Ben

Current Thread