Altova Mailing List Archives>Archive Index >comp.text.xml Archive Home >Recent entries [Thread Prev] >Thread Next - Re: XPath position predicates XPath position predicatesTo: NULL Date: 5/6/2009 5:35:00 PM Hello everybody, This may be a stupid question, but i've been banging my brain against it all afternoon, and as such i'm no longer think good. Given this XML: <table id="mytable"> <tr> <td class="left">port</td> <td class="right">starboard</td> </tr> <tr> <td class="left">gauche</td> <td class="right">droite</td> </tr> <tr> <td class="left">sinister</td> <td class="right">dexter</td> </tr> </table> (a) Should this XPath expression find the cell containing 'starboard': table[@id='mytable']/tr[1]/td[@class='right'] (b) Should these XPath expressions (i) mean the same thing and (ii) find the cell containing 'starboard': (1) table[@id='mytable']/tr/td[@class='right'][1] (2) table[@id='mytable']//td[@class='right'][1] (3) table[@id='mytable']//td[@class='right' and position()=1] ? I wrote some code on the assumption that the answer to (b)(ii) was 'yes', but it didn't work. I'm not sure if this is a mistaken assumption on my part, a failure to translate a correct assumption into correct code, or a bug in my XPath library (Xalan 2.7.1). My thinking had been that if you have an expression E that identifies a node set, then E[n] selects the nth node of that set. But fiddling and reading, it dawned on me that this isn't the case, but rather that E[n] means the members of E which are the nth child of their parents - in this case, the tr elements. That would be fine, but what i found rather counterintuitive is that example (b)(2), which is the form of expression i was using, contains no explicit mention of any tr, and so that means you're indexing into completely mysterious parent elements! In conclusion, sometimes i love XPath, and sometimes i hate it. Thanks, tom -- I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth. -- Umberto Eco | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
