当另一个节点存在时,XPath仅从表中获取节点

时间:2015-10-07 12:37:08

标签: xpath

我有一个关于XPath的具体问题。

假设我可以使用此查询从表中获取列:
    //div[@id="someid"]/table/tbody/tr/td[9]/text()

但是,我想只在另一个特定节点存在时获取此列。

我尝试过使用:
    //div[@id="someid"]/table/tbody/tr/td[9 and boolean(//a/span[@title='specifictitle'])]

然而,这不起作用,因为它返回表中的所有项目。

我有一些特定的限制:
- //div[@id="someid"]/table/tbody/tr是静态的,无法更改。
- td不包含有关其所在列的其他信息。

提前致谢!

1 个答案:

答案 0 :(得分:1)

2种方法:

首先 - 作为方括号内的直接条件:

//div[@id="someid"]/table/tbody/tr[//a/span[@title='specifictitle']]/td[9]/text()

这种方法更简单,位置无关紧要

这也是满足OP要求的方法,查询应以//div[@id="someid"]/table/tbody/tr开头

*您基本上可以将条件[//a/span[@title='specifictitle']]放入您想要的查询中的任何元素(也可以在tbody或table等后面。)

第二 - 使用轴(例如祖先)

关于HTML代码中元素位置的2个案例:

1)锚元素"之前"你的div与" someid":

//a/span[@title='specifictitle']//div[@id="someid"]/table/tbody/tr/td[9]/text()

2)锚元素""你的div与" someid":

//a/span[@title='specifictitle']/ancestor::div[@id="someid"]/table/tbody/tr/td[9]/text()

在这两种情况下,如果//a/span[@title='specifictitle']不存在,xpath-query将不会返回结果,如果我理解正确的话,这就是你需要的