假设我有这个(简化):
<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的情况下可靠地选择此提交按钮?
答案 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元素任何深度的元素