<a>
<b/>
<c/>
<d/>
<b/>
<e/>
</a>
Jak wybrać dzieci "a", które nie są "b"?XPath: wybierz elementy podrzędne, które * nie * mają konkretną nazwę
<a>
<b/>
<c/>
<d/>
<b/>
<e/>
</a>
Jak wybrać dzieci "a", które nie są "b"?XPath: wybierz elementy podrzędne, które * nie * mają konkretną nazwę
/a/*[not(self::b)]
Xpath będzie wyglądać:
a/*[name(.) !='b']
Więc wybierz dzieci 'a', którego nazwa nie jest równy 'b'
To łamie się, gdy używane są przestrzenie nazw i prefiksy. – Lucero
@Lucero - zgodnie ze źródłowym XML nie ma przestrzeni nazw, ale jeśli tak, to masz funkcję "local-name" – Dewfy
tak, a local-name() również się rozpadnie, ponieważ dopasuje elementy z dowolnej przestrzeni nazw, zamiast konkretnej nazwy elementu. Ponieważ zamieszczone tutaj próbki są często uproszczone (całkiem oczywiste tutaj), nie byłbym pewny, że nie będą używane przestrzenie nazw, a nawet wtedy, gdy ktoś googluje i natknie się na tę odpowiedź, powinien wiedzieć, że twoje rozwiązanie nie działa z przestrzeniami nazw. – Lucero
Z XPath 2.0 można nawet zrobić
/a/(* except b)
+1 za przyjemne użycie osi 'self';) – Lucero
@Lucero: Jestem winien @Tomalak za ten pomysł :) – AakashM
Dzięki za kredyt. :) – Tomalak