Dot-Net

XPath 選擇具有指定名稱的所有元素

  • February 25, 2013

我相信這應該能夠在不參考實現的情況下僅使用標準 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,它將為我提供目前節點下的所有蘋果節點,而不管它們在目前節點下的深度如何?具體來說,根據我上面的例子,我應該得到三個結果——紅色、綠色和黃色的蘋果。

試試.//apple。這列出了apple作為目前節點的後代的所有節點。為了更好地理解本主題,您應該了解 XPath 軸的工作原理。例如,你也可以寫descendant::apple

引用自:https://stackoverflow.com/questions/15077462