129

假设我有这个(简化):

<form id="myform">
    <!-- some input fields -->
    <input type="submit" value="proceed"/>
</form>

然后我可以通过 XPath 选择提交按钮//form[@id='myform']/input[@type='submit']。伟大的。

但是,我的模板可能会发生变化,我希望在提交按钮所在的深度上保持灵活。它可以放在一个表中,如下所示:

<form id="myform">
    <!-- some input fields -->
    <table><tr><td>
           <input type="submit" value="proceed"/>
    </td></tr></table>
</form>

我知道我可以选择孙子元素,但我不能选择任何深度的grand-grand-grand-...-childeren。例如:

  • //form[@id='myform']/*/input[@type='submit']只选孙子,不深。
  • //form[@id='myform']/*/*/input[@type='submit']只选孙子,不深不深。
  • //form[@id='myform']/**/input[@type='submit']无效。

那么,如何在不使用元素 ID 的情况下可靠地选择此提交按钮?

4

4 回答 4

194

您快到了。只需使用:

//form[@id='myform']//input[@type='submit']

//快捷方式也可以在表达式中使用。

于 2013-04-15T13:35:58.087 回答
18

如果您使用的是 XmlDocument 和 XmlNode。

说:

XmlNode f = root.SelectSingleNode("//form[@id='myform']");

采用:

XmlNode s = f.SelectSingleNode(".//input[@type='submit']");

这取决于您使用的工具。但是 .// 将从参考节点中选择任何孩子,任何深度。

于 2017-01-20T02:30:30.183 回答
10
//form/descendant::input[@type='submit']
于 2016-07-01T03:12:14.210 回答
-3

此外,您可以使用 css 选择器来做到这一点:

form#myform input[type='submit']

css 选举器中元素之间的空间意味着搜索 input[type='submit'] 父表单任何深度的元素#myform element

于 2018-07-04T07:56:57.433 回答