XPath:在某些其他节点出现之后的任何位置查找节点

时间:2018-10-17 14:44:41

标签: xpath

我试图在指定的其他节点出现后在HTML文档中找到任何节点。不仅在兄弟姐妹和孩子中,而且在远亲中也是如此。 从本质上讲,这基本上是从HTML文档开始的线性搜索,我知道这在某种程度上与xpath的层级性质相反。

我需要一个包含两个非常相似的表的页面,我要在其中处理第二个表。

这是一个简化的示例

<div>
    <div>
        <title>Table1</title>
    </div>
</div>
<table>
    <thead>
        <tr>
            <th>Col1</th>
            <th>Col2</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Val1</td>
            <td>Val2</td>
        </tr>
    </tbody>
</table>

<div>
    <div>   
        <title>Table2</title>
    </div>
</div>
<table>
    <thead>
        <tr>
            <th>Col1</th>
            <th>Col2</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>OtherVal1</td>
            <td>OtherVal2</td>  (==>This is the element I want)
        </tr>
    </tbody>
</table>

这个示例当然会使操作变得容易

//title[text()='Table2']/../../following-sibling::table/tbody/tr/td[2]

(如建议的in this topic

或者也许

//table[2]/tbody/tr/td[2]

但是我正在使用的真实文档具有更多的<div>和其他标签。区分这两个表的最自然的方法仍然是标题。 这就是为什么我想做这样的事情:

//title[text()='Table2']/[parseWholeCodeAfterThis]/table/tbody/tr/td[2]

1 个答案:

答案 0 :(得分:1)

我猜您正在寻找following轴:

//title[text()='Table2']/following::table//tr/td[2]

这应该允许您选择table,该文本位于{em> {em}

中的title节点后在DOM中的某个位置