找到 xpath 匹配的当前位置
finding the current position of xpath match
我正在尝试获取 xpath 匹配项的当前位置。这是一个真实世界的例子
在此页面上 http://newyork.backpage.com/homes-for-sale/
运行 下面的 xpath 匹配从顶部算起的第 8 个列表
//div[contains(@class, 'cat 93893742')]
我想以某种方式使用 xpath 获取广告位置,在发布此问题时它是“8”。我尝试使用 prececeding-sibling::div
但我得到了意想不到的结果。
想用 xpath 实现这个吗?
基于此和您的 previous question,也许以下 XPath 就是您要查找的内容:
count(
//div[contains(@class, 'cat 93893742')]/preceding-sibling::div[contains(@class, 'cat ')]
)+1
在@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')]
将匹配上下文节点
之前以classname=cat
开头的所有div
元素
因此,如果我们将所有这些都保留在 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
我不确定 htmlunit
的当前版本是否支持 XPath 2.0
,但如果支持,您可以使用以下表达式:
index-of(//div[starts-with(@class, "cat")], //div[@class='cat 93893742'])
这将 return 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'])
其中 returns 8
我正在尝试获取 xpath 匹配项的当前位置。这是一个真实世界的例子
在此页面上 http://newyork.backpage.com/homes-for-sale/
运行 下面的 xpath 匹配从顶部算起的第 8 个列表
//div[contains(@class, 'cat 93893742')]
我想以某种方式使用 xpath 获取广告位置,在发布此问题时它是“8”。我尝试使用 prececeding-sibling::div
但我得到了意想不到的结果。
想用 xpath 实现这个吗?
基于此和您的 previous question,也许以下 XPath 就是您要查找的内容:
count(
//div[contains(@class, 'cat 93893742')]/preceding-sibling::div[contains(@class, 'cat ')]
)+1
在@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')]
将匹配上下文节点
之前以classname=cat
开头的所有div
元素
因此,如果我们将所有这些都保留在 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
我不确定 htmlunit
的当前版本是否支持 XPath 2.0
,但如果支持,您可以使用以下表达式:
index-of(//div[starts-with(@class, "cat")], //div[@class='cat 93893742'])
这将 return 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'])
其中 returns 8