Wierzę, że powinno być możliwe uzyskanie odpowiedzi tylko za pomocą standardowego XPath bez odniesienia do implementacji, ale dla odniesienia używam obiektów DOM XML w .NET (Przestrzeń nazw System.Xml) .XPath, aby wybrać wszystkie elementy o określonej nazwie
Mam węzeł przekazany do mojej funkcji, gdzieś głęboko w dokumencie XML, i chcę wybrać wszystkie elementy potomne tego węzła, które mają określoną nazwę, niezależnie od pośredniczącej ścieżki do tych węzłów. Wezwanie Robię wygląda następująco:
node.SelectNodes("some XPath here");
Węzeł pracuję z wygląda mniej więcej tak:
...
<food>
<tart>
<apple color="yellow"/>
</tart>
<pie>
<crust quality="flaky"/>
<filling>
<apple color="red"/>
</filling>
</pie>
<apple color="green"/>
</food>
...
Co chcę jest lista wszystkich węzłów „jabłko” , czyli 3 wyniki. Próbowałem kilku różnych rzeczy, ale żaden z nich nie dostał tego, czego chcę.
node.SelectNodes("apple");
Daje mi to jeden wynik, zielone jabłko.
node.SelectNodes("*/apple");
Daje mi to jeden wynik, żółte jabłko.
node.SelectNodes("//apple");
To daje mi setki wyników, wygląda na każdym węźle jabłkowego w dokumencie, lub przynajmniej może każdy węzeł jabłko, które jest bezpośrednim potomkiem korzenia dokumentu.
Jak utworzyć XPath, który da mi wszystkie węzły jabłoni w moim bieżącym węźle, niezależnie od tego, jak głęboko pod bieżącym węzłem są znalezione? W szczególności, na podstawie powyższego przykładu, powinienem otrzymać trzy wyniki - czerwone, zielone i żółte jabłka.
Idealne, właśnie tego szukałem. Wyszukałem Google przez godzinę i nie mogłem tego znaleźć. Aby wyjaśnić, aby zrozumieć, że rozumiem składnię poprawnie - podwójne ukośniki dają mi wszystkie węzły jabłek bez względu na głębokość (jak próbowałem w moim pytaniu powyżej), a kropka przed nimi ogranicza wybór do potomków obecnego węzła. Czy to jest poprawne? –
Tak, zgadza się. Zmieniłem także mój post, aby dać ci dodatkowe wskazówki. – nwellnhof
Edytowałeś swoją odpowiedź, mówiąc, że powinnam się nauczyć, jak działają osie XPath - zgadzam się. Czy masz jakieś sugestie dotyczące dobrych zasobów, które powinienem sprawdzić? –