我相信这应该只能使用标准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一下.