我相信这应该能够在不参考实现的情况下仅使用标准 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,它将为我提供当前节点下的所有苹果节点,而不管它们在当前节点下的深度如何?具体来说,根据我上面的例子,我应该得到三个结果——红色、绿色和黄色的苹果。