XPATH - 如何选择文本的这一部分?

时间:2012-03-22 13:02:32

标签: php xpath

页面上的代码:

<div class='container'> 
<p>
    <b>Address:</b> Some address<br />
    <b>Phone:</b> phone1, phone2<br />
    <b>E-mail: </b><a href='mailto:somemail' >somemail</a><br />
    <b>Site:</b><a href='somesite'>somesite</a>
</p>    
</div>

我需要使用XPATH在</b>之后和<br />之前选择文本。 在这种情况下,我需要获得“一些地址”或“phone1,phone2”等。

'某些地址'需要在$ var1中 $ phone2中的'phone1,phone2'

我试过.//*[@class="container"]/p/text()[1]它没有用。

2 个答案:

答案 0 :(得分:3)

试试这个

/div[@class="container"]/p/descendant-or-self::text()[
    not(ancestor::b) 
    and normalize-space(.) != ""
]

这将选择P元素树(具有类属性“container”的div)中不在B元素树内或为空的P元素树中的文本节点,例如,这会给你

  • “一些地址”,
  • “phone1,phone2”,
  • “somemail”和
  • “somesite”。

Demo

另请查看此XPath tutorial

答案 1 :(得分:0)

我能找到的最近的是:

'//div[@class="container"]/p/text()[preceding::b[contains(text(),"Address")] and following-sibling::b[contains(text(),"Phone")]]'

或@Gordon建议

 '//div[@class="container"]/p/text()[following::b[contains(text(),"Phone")] and normalize-space(.)!=""]'

:)