如何编写XPath从目标td元素查找所有前置tr行节点
问题场景
现有如下结构的多行HTML表格:
<table> <tr> <td></td> </tr> <tr> <td></td> </tr> <tr> <td></td> </tr> <tr> <td></td> </tr> <tr> <td><strong>myTd</strong></td> </tr> <tr> <td></td> </tr> </table>
已编写XPath匹配包含文本myTd的strong节点:
/table/tbody/tr/td/strong[text()="myTd"]
目标是获取该节点所在tr之前的所有tr节点(示例中为前4个tr元素)。
之前尝试的写法:
/table/tbody/tr/td/strong[text()="myTd"]/ancestor::tr
该写法仅能返回myTd所在的第5个tr,无法返回前置tr节点。
正确解决方案
使用preceding-sibling轴选取目标节点之前的同级元素,正确XPath写法为:
/table/tbody/tr[td/strong[text()="myTd"]]/preceding-sibling::tr
逻辑说明
- 先通过谓词
[td/strong[text()="myTd"]]精准定位到包含目标文本的tr行 - 再通过
preceding-sibling::tr匹配该行之前所有同级的tr节点,在示例中会准确返回前4个tr元素
补充适配提示:如果HTML源码未手动编写
<tbody>标签,部分HTML解析器不会自动补全该节点,此时可去掉路径中的/tbody段,或使用通配路径写法/table//tr[td/strong[text()="myTd"]]/preceding-sibling::tr提升兼容性。
内容的提问来源于stack exchange,提问作者Lucho82
相关产品推荐
相关产品推荐

