使用xpath根据孙子选择元素

时间:2015-02-03 20:27:10

标签: html xpath

我正在尝试根据我想要的元素的子元素在网页中找到一个元素。我需要这个,因为它是网页的可点击部分。

<table id="uniqueId">
  <tbody>
    <tr></tr>
    <tr class="row" onclick="do_a_thing">
      <td>
        <input type="hidden" value="1" />
      </td>
      <td>
        <input type="hidden" value="1" />
      </td>
    </tr>
    <tr class="row" onclick="do_a_thing">
      <td>
        <input type="hidden" value="2" />
      </td>
      <td>
        <input type="hidden" value="1" />
      </td>
    </tr>
    <tr class="row" onclick="do_a_thing">
      <td>
        <input type="hidden" value="3" />
      </td>
      <td>
        <input type="hidden" value="1" />
      </td>
    </tr>
  </tbody>
</table>

我目前有以下xpath来选择包含输入值为2的属性的表行:

//*table[@id='uniqueId']//tr[td[0]/value='2']

根据previous question,这应该有效。为什么它不起作用?

1 个答案:

答案 0 :(得分:2)

以下XPath

//table[@id='uniqueId']//tr[td/input[@value='2']]

当应用于您的输入时,HTML具有输出

<tr class="row" onclick="do_a_thing">
  <td>
    <input type="hidden" value="2" />
  </td>
  <td>
    <input type="hidden" value="1" />
  </td>
</tr>

XPath tr[td[0]/value='2']无法使用value属性,值2属于td中的输入:

tr[td/input[@value='2']]

此外,正如LarsH所述,评论td[0]意味着td[position() = 0]不会选择任何元素,因为position()是基于1的,所以[0]是一个总是错误的谓词。