如何使用XPathselect任何深度的子元素?

假设我有这个(简化):

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

然后我可以通过XPath //form[@id='myform']/input[@type='submit']select提交button。 大。

但是,我的模板可能会改变,我想在提交button所在的深度上变得灵活。 它可能被放在一张桌子上,像这样:

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

我知道我可以select孙子的元素,但是我不能select任何深度的盛大的盛大的子孙。 例如:

  • //form[@id='myform']/*/input[@type='submit']只selectgrand-children,没有深度。
  • //form[@id='myform']/*/*/input[@type='submit']只selectgrand-grand-children,没有更多或更less的深度。
  • //form[@id='myform']/**/input[@type='submit']无效。

那么,如何在不使用元素ID的情况下可靠地select这个提交button呢?

你快到了。 只需使用:

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

//快捷键也可以在expression式中使用。

如果您正在使用XmlDocument和XmlNode。

说:

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

使用:

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

这取决于你使用的工具。 但是。将select任何一个孩子,从参考节点的任何深度。

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