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


XPATH - how to select this part of the text?

页面上的代码:

<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 />之前的文本。在这种情况下,我需要获得"一些地址"或"电话1,电话2"等

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

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

试试这个

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

这将选择p元素树(类属性为"container"的div)中不在B元素树中或为空的文本节点,例如,这将为您提供

  • "某个地址"
  • "电话1,电话2"
  • "somemail"和
  • "somesite"

演示

还可以看看这个XPath教程。

我能到达的最近的是:

'//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(.)!=""]'

:)