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

Re: [xsl] Determining the position of a specific node in the context


Subject: Re: [xsl] Determining the position of a specific node in the context
From: David Carlisle <davidc@xxxxxxxxx>
Date: Fri, 20 Oct 2006 10:01:33 +0100

> "Give me the position of a specific node in the context"

so long as by context you mean what the spec means, which is its
position in the current sequence (current node list in 1.0 terminology)
not its position in the input tree. position() never relates to teh
input tree at all, the same node will have diffeerent values of
position() depending on how it was selected, for example if it is
selected with self:: or parent:: it will have position()=1.


  <xsl:variable 
    name="p" 
    select="(node()[...predicate...]/position())[1]"/>
  
  with the [1] added to make it a singleton, and is equivalently still
  best written in XPath 1 as
  
  <xsl:variable 
    name="p" 
    select="count(node()[...predicate...][1]/preceding-sibling::node()) + 1"/>
  
they are not equivaent. The first one will always return 1 as the first
position in a sequence is always 1.

The second one returns the position in the sequence of child nodes of
teh selected predicate, if there is 1, and 0 otherwise. (Beware though
usually when doing thois sort of thing you want to use * rather than
node() otherwise you will be thrown off by indentation white space,
comments etc.

David

1


Current Thread
Keywords