我相信这应该只能使用标准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 回答
试试
.//apple
. 这将列出作为当前节点后代的所有apple
节点 . 为了更好地理解本主题,您应该了解XPath轴的工作原理 . 例如,您也可以编写descendant::apple
.