HTML XPath - 如何根据子索引的每个索引值选择节点?

时间:2013-11-07 00:18:30

标签: javascript html xpath

给出以下示例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表达式来选择(tr)元素,该元素在第一列的div中具有“Value 1”,在第二列的div中具有“Value 2” 柱?在这个例子中,我只想要第一行。

如果我检索所有具有“值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]而不是位置()无济于事。有任何想法吗?感谢

2 个答案:

答案 0 :(得分:0)

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

//table/tr[td[1]/div = 'Value 1' and td[2]/div = 'Value A']

答案 1 :(得分: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