これは、実装を参照せずに標準の 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");
これにより、青リンゴという 1 つの結果が得られます。
node.SelectNodes("*/apple");
これにより、1 つの結果、黄色いリンゴが得られます。
node.SelectNodes("//apple");
これにより、何百もの結果が得られ、ドキュメント内のすべてのリンゴ ノード、または少なくともドキュメントのルートの直接の子であるすべてのリンゴ ノードのように見えます。
現在のノードの下の深さに関係なく、現在のノードの下にあるすべてのリンゴ ノードを提供する XPath を作成するにはどうすればよいですか? 具体的には、上記の例に基づいて、赤、緑、黄色のリンゴの 3 つの結果が得られるはずです。