首页 文章

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

提问于
浏览
21

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

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

node.SelectNodes("some XPath here");

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

...
<food>
  <tart>
    <apple color="yellow"/>
  </tart>
  <pie>
    <crust quality="flaky"/>
    <filling>
      <apple color="red"/>
    </filling>
  </pie>
  <apple color="green"/>
</food>
...

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

node.SelectNodes("apple");

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

node.SelectNodes("*/apple");

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

node.SelectNodes("//apple");

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

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

1 回答

  • 31

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

相关问题