2010-01-28 17 views

Odpowiedz

81

/a/*[not(self::b)]

+2

+1 za przyjemne użycie osi 'self';) – Lucero

+2

@Lucero: Jestem winien @Tomalak za ten pomysł :) – AakashM

+0

Dzięki za kredyt. :) – Tomalak

1

Xpath będzie wyglądać:

a/*[name(.) !='b'] 

Więc wybierz dzieci 'a', którego nazwa nie jest równy 'b'

+3

To łamie się, gdy używane są przestrzenie nazw i prefiksy. – Lucero

+0

@Lucero - zgodnie ze źródłowym XML nie ma przestrzeni nazw, ale jeśli tak, to masz funkcję "local-name" – Dewfy

+2

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

9

Z XPath 2.0 można nawet zrobić

/a/(* except b) 
Powiązane problemy