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

时间:2013-04-15 13:33:08

标签: xpath

假设我有这个(简化):

<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>

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

  • //form[@id='myform']/*/input[@type='submit']只选择了大孩子,没有进一步的深度。
  • //form[@id='myform']/*/*/input[@type='submit']只选择盛大的孩子,没有更深或更少的深度。
  • //form[@id='myform']/**/input[@type='submit']无效。

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

4 个答案:

答案 0 :(得分:128)

你快到了。只需使用:

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

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

答案 1 :(得分:11)

如果您使用的是XmlDocument和XmlNode。

说:

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

使用:

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

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

答案 2 :(得分:8)

//form/descendant::input[@type='submit']

答案 3 :(得分:0)

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

form#myform input[type='submit']

css选择器中元素之间的空间意味着搜索输入[type ='submit']处于父窗体#myform元素任何深度的元素