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:22:43 +0100
Frank Marent wrote:
david, abel

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]


it's always a good feeling among xml-giants... i was posting the point you've detected yourself - and abel. your statement reads for me like:


//CELL[@test='yes']magic()/but()/it()/works()/halleluja()/preceding-sibling::CELL)+1]



:))


Note that I tried to correct David with removing the '+1' with a self-test. But that's not needed. David's last solution is perfect and comes down to about the same I invented (it almost looked like David and I were in the same room: even the sample input and test template about matched!), but mine is a bit overly complicated.

(the reason that you can use +1 safely is that you are already walking from the path CELL[@test='yes'], which means that once the path matches, you are certain the +1 is correct)

About the 'magic', I usually do a mind-treewalk while dissecting a path. I imaging being some place on the XML tree and then walk the steps I wrote down in the XPath. Then suddenly the 'magic' goes and it all seems so logical.

Cheers,
-- Abel

Current Thread