找到xpath匹配的当前位置

时间:2017-05-12 03:57:53

标签: xpath htmlunit

我试图获取xpath匹配的当前位置。这是一个真实世界的例子

在此页http://newyork.backpage.com/homes-for-sale/

运行以下xpath匹配从顶部开始计算的第8个列表

//div[contains(@class, 'cat 93893742')]

我想以某种方式使用xpath获取广告位置,在发布此问题的时候是" 8"。我尝试使用prececeding-sibling::div但我得到了意想不到的结果。

无论如何用xpath来实现这个目标?

3 个答案:

答案 0 :(得分:1)

我不确定当前版本的htmlunit是否支持XPath 2.0,但如果是这样,您可以使用以下表达式:

index-of(//div[starts-with(@class, "cat")], //div[@class='cat 93893742'])

这将返回10 - 公共列表中的位置

如果您希望在特定日期(Thu. May. 11)的列表中获得排名,可以尝试:

index-of(//div[normalize-space()="Thu. May. 11"]/following::div[starts-with(@class, "cat")],//div[normalize-space()="Thu. May. 11"]/following::div[@class='cat 93893742'])

返回8

答案 1 :(得分:0)

基于此和previous question,您可能正在寻找以下XPath:

count(
    //div[contains(@class, 'cat 93893742')]/preceding-sibling::div[contains(@class, 'cat ')]
)+1

答案 2 :(得分:0)

@ har07答案中添加了一些说明

我认为这就是你所需要的

count(//div[contains(@class, 'cat 93893742')]/preceding-sibling::div[starts-with(@class,'cat')])+1

让我们分解整个

//div[contains(@class, 'cat 93893742')]

将匹配具有classname = cat 93893742

的必需上下文节点
/preceding-sibling::div[starts-with(@class,'cat')]

将匹配所有div元素在您的上下文节点

之前与classname=cat匹配

因此,如果我们将所有这些保留在count()中,它将在上下文节点之前计算所有div标记所以添加1以包括上下文节点的计数

如果要使用上面计算的索引来指向该元素,请添加此

//div[starts-with(@class,'cat')][count(//div[contains(@class, 'cat 93893742')]/preceding-sibling::div[starts-with(@class,'cat')])+1]

等于

//div[starts-with(@class,'cat')][10]   // 10 in index number