XPath以基于另一个节点按位置选择节点's的位置

XPath to select a node by position based on another node's position

本文关键字:节点 位置 选择 另一个 XPath      更新时间:2023-09-26

使用XPath,有没有办法选择一个位置等于另一个来自不同父级的节点的位置的节点

具体来说,假设我有一个简单的HTML表(也可以在这个jsFiddle中获得):

<table>
  <thead>
    <tr>
      <th>Col A</th>
      <th>Col B</th>
      <th>Col C</th>
      <th>Col D</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Field A</td>
      <td>Field B</td>
      <td>Field C</td>
      <td>Field D</td>
    </tr>
  </tbody>
</table>

假设我想选择第二列的td,即<td>Field B</td>,但我想通过查找标题为"Col B"的列来表达它。换句话说,我想选择具有position()=2<td>Field B</tb>,但我不想硬编码2,而是想通过查找文本为"Col B"th来导出它。

当然,我可以使用选择th

$x("//th[text()='Col B']")

但现在我想提取thposition()(等于2),并用它来根据位置选择td

从概念上讲,我想做如下的事情,除了它不是有效的XPath:

$x("//td[position()=//th[text()='Col B'][position()]")

这有可能吗?

您可以计算字符串值为任意给定值(例如"Col B")的th之前的th元素的数量,并使用该计数来选择相应的td元素:

//td[count(//th[.='Col B']/preceding-sibling::th)+1]