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


101

假设我有这个(简体):

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

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

  • //form[@id='myform']/*/input[@type='submit'] 只选择孙子,不再深入。
  • //form[@id='myform']/*/*/input[@type='submit'] 只选择孙子,没有更多或更少的深度。
  • //form[@id='myform']/**/input[@type='submit'] 无效。

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

Answers:



14

如果您使用的是XmlDocument和XmlNode。

说:

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

用:

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

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


在早期提取的特定XML节点上使用SelectSingleNode命令在Powershell中可以很好地工作。
Gizmo3399


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.