XPath表达式 - 查找元素而不指定整个路径

时间:2012-01-19 19:53:39

标签: xpath

我正在使用一个带有XPath表达式的库进行一些屏幕抓取,并注意到几个页面相似,但不同。

有没有办法可以松散地说“让我得到div ='mytarget'的div,但作为div的孩子存在,使用class ='nav'而且nav和mytarget之间的确切路径是未知的。”

<div class="nav">

<div>

??????

<div class="mytarget"></div>

??????

</div>

</div>

2 个答案:

答案 0 :(得分:3)

是的,使用descendant-or-self轴(//):

//div[@class='nav']//div[@class='mytarget']

或者,如果这些元素上可以有多个类名,那么这就更好了:

//div[contains(concat(' ', @class, ' '), ' nav ')]//
      div[contains(concat(' ', @class, ' '), ' mytarget ')]

警告:这对大型文档来说效率非常低。在结构已知的任何地方都应使用绝对路径。当结构未知时,只能求助于//

答案 1 :(得分:0)

这就是“//”表达式的用途。类似的东西:

//*[@class="nav"]//*[@class="mytarget"]

http://www.w3schools.com/xpath/xpath_syntax.asp