Re: [xsl] finding position() in xpath 1.0

Subject: Re: [xsl] finding position() in xpath 1.0
From: David Carlisle <davidc@xxxxxxxxx>
Date: Mon, 19 Mar 2007 13:08:10 GMT
I think I mis read your requirement. the code I posted works so long as
there is at most one node with test="yes. If you have multiple such
nodes and need to select the preceding cousin of all of them,
Then...

//CELL[@test='yes']/../preceding-sibling::ROW[1]/CELL[position()=count(../following-sibling::ROW[1]/CELL[@test='yes']/preceding-sibling::CELL)+1]

David


<ROWS>
<ROW>
   <CELL id="a"/>
   <CELL id="b"/>   <!-- select this and only this-->
   <CELL id="c"/>
</ROW>
<ROW>
   <CELL/>
   <CELL test="yes"/>
   <CELL/>
</ROW>
<ROW>
   <CELL/>
   <CELL/>
   <CELL/>
</ROW>
<ROW>
   <CELL id="aa"/>
   <CELL id="bb"/>   <!-- select this and only this-->
   <CELL id="cc"/>
</ROW>
<ROW>
   <CELL/>
   <CELL test="yes"/>
   <CELL/>
</ROW>
<ROW>
   <CELL/>
   <CELL/>
   <CELL/>
</ROW>
</ROWS>

  <xsl:template match="/">
    <xsl:copy-of select="//CELL[@test='yes']/../preceding-sibling::ROW[1]/CELL[position()=count(../following-sibling::ROW[1]/CELL[@test='yes']/preceding-sibling::CELL)+1]"/>
  </xsl:template>
</xsl:stylesheet>

$ saxon count.xml count.xsl
<?xml version="1.0" encoding="utf-8"?><CELL id="b"/><CELL id="bb"/>

Current Thread