RE: [xsl] trouble with preceding axis

Subject: RE: [xsl] trouble with preceding axis
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 3 Jan 2006 21:09:21 -0000
//item[label = 'subTitle']/preceding-sibling::item[1]

Your expression

//preceding::item[label = 'subTitle']

means

/descendant-or-self::node()/preceding::item[label = 'subTitle']

which finds all the nodes in the document, then for each one searches
backwards to find preceding items with label='subtitle', and then eliminates
the duplicates.

Note also the distinction between preceding-sibling and preceding.

In your case the [1] is unnecessary because there is only one preceding
sibling item, but I guess your real problem is a bit more complex.

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

> -----Original Message-----
> From: Duane Gran [mailto:duane.gran@xxxxxxxxx] 
> Sent: 03 January 2006 18:35
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] trouble with preceding axis
> 
> I'm having some trouble using the preceding axis in XPath and would  
> be much obliged if someone could steer me in the right direction.  I  
> have the following document:
> 
> <root>
>    <item order="3">
>      <label>Title</label>
>    </item>
>    <item order="4">
>      <label>subTitle</label>
>    </item>
> </root>
> 
> I have the following XPath to select the second item, based on the  
> value of its label child:
> 
>    //item[label = 'subTitle']
> 
> Now I want to modify this so that I refer to the preceding item  
> element, the first one in the list.  I tried the following without  
> success (it returns the second item element):
> 
>    //preceding::item[label = 'subTitle']
> 
> Suggestions are most welcome on this.
> 
> Duane

Current Thread