php - XPath 1.0 - Make selection based on value of text spread over multiple nodes -


<root>   <div>     <p>this text</p>     <p><span>fo</span><span>ob</span><span>ar</span></p>   </div>   <div>     <p>this text</p>     <p><span>fo</span><span>b</span><span>ar</span></p>   </div>   <div>     <p>this text</p>     <p><span>fooba</span><span>r</span></p>   </div>   <div>     <p><span>foo</span>this text<span>bar</span></p>   </div>   <div>     <p><span>foo</span><img/><span>bar</span></p>   </div>   <div>     <p><span>foo</span><span>bar</span><span>baz</span></p>   </div>   <div>     <p>foobar</p>   </div> </root> 

given above xml xpath 1.0 query select <div>s based on foobar appearing within single <span> or split across multiple consecutive <span>s? want select first , third <div>. second <div> contains fobar, not foobar. in fourth <div> <span>s not consecutive. fifth <div> has <img> between <span>s they're no longer consecutive , text of sixth foobarbaz, not foobar. seventh has correct text not within <span>s.

i have tried using concat() doesn't work because need know number of arguments first. also, saying concat(//*, //*) equivalent concat(//*[1], //*[1]), not want.

this within php have xpath 1.0.

you can try xpath :

/root/div[contains(normalize-space(.), 'foobar')] 

notice . returns concatenation of text nodes within current context node.

output in xpath tester :

element='<div>   <p>this text</p>   <p>     <span>fo</span>     <span>ob</span>     <span>ar</span>   </p> </div>' element='<div>   <p>this text</p>   <p>     <span>fooba</span>     <span>r</span>   </p> </div>' 

Comments

Popular posts from this blog

facebook - android ACTION_SEND to share with specific application only -

python - Creating a new virtualenv gives a permissions error -

javascript - cocos2d-js draw circle not instantly -