如何使用XPath选择任何深度的子元素?

ger*_*ijk 87 xpath

假设我有这个(简化):

<form id="myform">
    <!-- some input fields -->
    <input type="submit" value="proceed"/>
</form>
Run Code Online (Sandbox Code Playgroud)

然后我可以通过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>
Run Code Online (Sandbox Code Playgroud)

我知道我可以选择孙子的元素,但我不能选择任何深度的盛大盛大的孩子们.例如:

  • //form[@id='myform']/*/input[@type='submit'] 只选择大孩子,没有更深入的.
  • //form[@id='myform']/*/*/input[@type='submit'] 只选择曾祖母,没有更深或更少的深度.
  • //form[@id='myform']/**/input[@type='submit'] 无效.

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

nwe*_*hof 141

你快到了.只需使用:

//form[@id='myform']//input[@type='submit']
Run Code Online (Sandbox Code Playgroud)

所述//快捷方式也可以在表达式中.


s k*_*s k 13

如果您正在使用XmlDocument和XmlNode.

说:

XmlNode f = root.SelectSingleNode("//form[@id='myform']");
Run Code Online (Sandbox Code Playgroud)

使用:

XmlNode s = f.SelectSingleNode(".//input[@type='submit']");
Run Code Online (Sandbox Code Playgroud)

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


小智 8

//form/descendant::input[@type='submit']
Run Code Online (Sandbox Code Playgroud)

  • 添加一些描述. (5认同)