页面上的代码:
<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(.)!=""]'
:)