XPath根据另一个节点的位置

时间:2016-04-28 22:02:43

标签: javascript xml dom xpath

使用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"的列来表达它。换句话说,我想选择<td>Field B</tb>position()=2,而不是硬编码2,我想通过查找文本为{{1}的th来推导它}。

当然,我可以使用

选择"Col B"
th

但现在我要提取$x("//th[text()='Col B']") 的{​​{1}}(等于2)并使用它来选择th的位置。

从概念上讲,我想做类似以下的事情,除了它无效的XPath:

position()

这有可能吗?

1 个答案:

答案 0 :(得分:1)

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

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