XPath选择具有指定名称的所有元素

Sea*_*rle 27 .net xml xpath

我相信这应该只能使用标准XPath来回答,而不需要参考实现,但仅供参考我在.Net(System.Xml命名空间)中使用XML DOM对象.

我有一个节点从一个XML文档深处的某个地方传递给我的函数,我想选择具有特定名称的该节点的所有后代元素,而不管这些节点的中间路径.我正在制作的电话看起来像这样:

node.SelectNodes("some XPath here");
Run Code Online (Sandbox Code Playgroud)

我正在使用的节点看起来像这样:

...
<food>
  <tart>
    <apple color="yellow"/>
  </tart>
  <pie>
    <crust quality="flaky"/>
    <filling>
      <apple color="red"/>
    </filling>
  </pie>
  <apple color="green"/>
</food>
...
Run Code Online (Sandbox Code Playgroud)

我想要的是所有"苹果"节点的列表,即3个结果.我尝试过几种不同的东西,但没有一种能得到我想要的东西.

node.SelectNodes("apple");
Run Code Online (Sandbox Code Playgroud)

这给了我一个结果,绿苹果.

node.SelectNodes("*/apple");
Run Code Online (Sandbox Code Playgroud)

这给了我一个结果,黄色的苹果.

node.SelectNodes("//apple");
Run Code Online (Sandbox Code Playgroud)

这给了我数百个结果,看起来像文档中的每个苹果节点,或者至少可能是文档根目录的直接子节点的每个苹果节点.

如何创建一个XPath,它将为我提供当前节点下的所有苹果节点,无论它们在当前节点下的深度如何?具体来说,根据我上面的例子,我应该得到三个结果 - 红色,绿色和黄色的苹果.

nwe*_*hof 36

试试.//apple.这将列出apple作为当前节点后代的所有节点.为了更好地理解本主题,您应该了解XPath轴的工作原理.你也可以写descendant::apple一下.