我试图获取xpath匹配的当前位置。这是一个真实世界的例子
在此页http://newyork.backpage.com/homes-for-sale/
运行以下xpath匹配从顶部开始计算的第8个列表
//div[contains(@class, 'cat 93893742')]
我想以某种方式使用xpath获取广告位置,在发布此问题的时候是" 8"。我尝试使用prececeding-sibling::div
但我得到了意想不到的结果。
无论如何用xpath来实现这个目标?
答案 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