1

给定以下示例 HTML 代码:

<table>
   <tr>
      <td>
         <div>Value 1</div>
      </td>
      <td>
         <div>Value A</div>
      </td>
   </tr>
   <tr>
      <td>
         <div>Value 1</div>
      </td>
      <td>
        <div>Value B</div>
      </td>
   </tr>
   <tr>
      <td>
         <div>Value A</div>
      </td>
      <td>
         <div>Value 1</div>
      </td>
   </tr>
</table>

是否可以编写一个 xpath 表达式来选择在第一列的 div 中具有“值 1”和在第二列的 div 中具有“值 2”的 (tr) 元素?在这个例子中,我只想要第一行。

如果我检索具有“值 1”的后代的所有行,我将获得所有 3 行。

如果我检索具有“值 1”和“值 A”的后代的所有行,我将获得第 1 行和第 3 行。

重要的不仅是价值,还有顺序。此外,在我的真实案例中,有几列,我需要检查的列可能不是并排的。(例如,我可能需要检查第 4 7 和 9 列)

我想我正在寻找这样的东西,但它对我不起作用(奇怪的格式是为了便于阅读,但我相信它仍然有效):

//table//tr
[
(.//div[position()=1 and text()='Value 1']) 
and 
(.//div[position()=2 and text()='Value A'])
]

我也试过 [1] 和 [2] 而不是 position() 无济于事。有任何想法吗?谢谢

4

2 回答 2

0

你的表达对我有用,虽然我会这样写:

//table/tr[td[1]/div = 'Value 1' and td[2]/div = 'Value A']
于 2013-11-07T00:26:03.897 回答
0

简单的

//tr[normalize-space(td[1]/div) = 'Value 1' and normalize-space(td[2]/div) = 'Value A']

演示 - http://www.xpathtester.com/obj/e3d5b9bf-79d5-4e81-a336-daba38d430fe

于 2013-11-07T00:26:21.587 回答