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

Subject: Re: [xsl] finding position() in xpath 1.0
From: Abel Braaksma <abel.online@xxxxxxxxx>
Date: Mon, 19 Mar 2007 14:10:33 +0100
David Carlisle wrote:


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

This won't work when there are more than one CELL that has @test='yes'. Change it as follows to work for each row and to select all CELLs that have a @test='true' in the next ROW on the same position:

count(//CELL[@test='yes']/preceding-sibling::CELL)

to:

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


This will work with input like:


<ROW>
   <CELL>11</CELL>
   <CELL>12</CELL>
   <CELL>13</CELL>
</ROW>
<ROW>
   <CELL>21</CELL>
   <CELL test="yes">22</CELL>
   <CELL>23</CELL>
</ROW>
<ROW>
   <CELL>31</CELL>
   <CELL>32</CELL>
   <CELL>33</CELL>
</ROW>
<ROW>
   <CELL>41</CELL>
   <CELL>42</CELL>
   <CELL test="yes">43</CELL>
</ROW>


For which is returns:


<CELL>12</CELL>
<CELL>33</CELL>

(just my interpretation of Frank Marents request)

Cheers,
-- Abel Braaksma

Current Thread