Xpath expression to find non-child elements by attribute -


here's nice puzzle. suppose have bit of code:

<page n="1"> <line n="3">...</line> </page> 

it real easy locate line element "n=3" within page element "n=1" simple xpath expression: xpath(//page[@n='1')/line[@n='3']). great, beautiful, elegant. suppose have encoding (folks familiar tei know coming from).

<pb n="1"/> (arbitrary amounts of stuff) <lb n="3"/> 

we want find lb element n="3", follows pb element n="1". note -- lb element anywhere following pb: may not (and not) sibling, child of sibling of pb, or of pb's parent, etc etc etc.

so question: how search lb element n="3", follows pb element n="1", xpath?

thanks in advance

peter

use:

 //pb[@n='1']/following::lb[@n='2'] | //pb[@n='1']/descendant::lb[@n='2'] 

this selects lb element follows specified pb in document order -- if wanted lb element descendant of pb element.

do note the following expression doesn't in general select wanted lb elements (it fails select of these descendants of pb element):

 //pb[@n='1']/following::lb[@n='2'] 

explanation:

as defined in w3c xpath specification, following:: , descendant:: axes non-overlapping:

"the following axis contains nodes in same document context node after context node in document order, excluding descendants , excluding attribute nodes , namespace nodes"


Comments

Popular posts from this blog

javascript - backbone.js Collection.add() doesn't `construct` (`initialize`) an object -

php - Get uncommon values from two or more arrays -

Adding duplicate array rows in Php -