如何正确使用XPath preceding-sibling?获取每个div.row的最近前置h2
这问题我之前踩过坑!你当前用的preceding-sibling::h2会返回当前节点所有前置的h2兄弟元素,而大多数解析工具默认会取第一个匹配的节点(也就是最顶部的Apple),所以才会所有row都指向它。
修正方案:选中最近的前置h2
只需要在XPath表达式末尾加上[1],限定取第一个匹配的节点即可:
preceding-sibling::h2[1]
为什么这能生效?
preceding-sibling轴的节点是按反向文档顺序排列的——离当前节点越近的节点,在轴的结果里排得越靠前。所以[1]就会精准定位到当前节点前最近的那个h2元素。
批量匹配的完整XPath
如果你要一次性获取每个div.row对应的最近h2,可以用这个完整表达式:
//div[@class='row']/preceding-sibling::h2[1]
针对你的HTML结构测试:
- 对应内容为A的row,会选中
<h2>Apple</h2> - 对应内容为B的row,会选中
<h2>Banana</h2> - 对应内容为C的row,会选中
<h2>Strawberry</h2>
完全符合你的需求~
内容的提问来源于stack exchange,提问作者聖杯ツグミ
相关产品推荐
相关产品推荐

