17
我相信這應該能夠使用標準XPath而不參考實現來回答,但僅供參考我正在使用.Net中的XML DOM對象(System.Xml名稱空間) 。XPath來選擇具有指定名稱的所有元素
我有一個交給我的函數的節點,從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節點,而不管當前節點下的節點有多深?具體來說,根據我上面的例子,我應該得到三個結果 - 紅色,綠色和黃色的蘋果。
完美,這正是我所期待的。我谷歌搜索了一個小時,找不到那個。只是爲了澄清,看到我正確理解語法 - 雙斜線給我所有的蘋果節點,無論深度如何(正如我在上面的問題中試過的),並且它們之前的點限制了選擇到當前節點的後代。那是對的嗎? – 2013-02-25 22:28:14
是的,這是正確的。我還編輯了我的帖子,給你一些額外的指針。 – nwellnhof 2013-02-25 22:29:22
你編輯你的答案,說我應該學習XPath軸的工作方式 - 我同意。你有什麼好建議我應該檢查一下嗎? – 2013-02-25 22:30:13