【问题标题】:XPath for all nodes with children that do not match certain criteria?具有不符合某些条件的子节点的所有节点的 XPath?
【发布时间】:2019-12-04 05:23:09
【问题描述】:

我正在尝试在网页中查找某些元素,但我不知道该怎么做。

我已尝试使用not 函数,但由于场景原因,它不起作用。

<table id="uniqueId">
  <tbody>
    <tr></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="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>

我想选择所有没有inputtrvalue=2 作为孩子。

我试过://tr[.//input[not(@value='2')]],但它不起作用,因为trs 还有另一个input,其值为1

【问题讨论】:

    标签: c# html xml xpath


    【解决方案1】:

    这个 XPath,

    //tr[not(td/input/@value='2')]
    

    根据要求选择所有trs,但不包括td/inputs 且value 属性值等于2

    【讨论】:

    • 谢谢@kjhughes 的工作。现在我有另一个与您的回答有关的问题。我认为如果您想指定节点的子节点,您需要使用 ./.// 但我尝试了与您编写它相同的方式并且它有效。为什么是在[]里面找后代,而不是在当前节点里面找属性?
    • (1) 您可以将td 改写为./td,而不那么简洁;两者都选择上下文元素的 td 子元素。 OTOH,.//input 将选择任意深度的input 后代。 (2) 谓词 ([]) 应用于您要选择的元素 tr
    猜你喜欢
    • 1970-01-01
    • 2013-11-30
    • 2016-11-17
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多