2010-01-28 18 views

risposta

81

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

+2

+1 per il buon uso dell'asse 'self';) – Lucero

+2

@Lucero: Devo @Tomalak per quell'idea :) – AakashM

+0

Grazie per il credito. :) – Tomalak

1

Xpath sarà:

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

Quindi, selezionare figli di 'a' il cui nome non è uguale 'b'

+3

Questo si interrompe quando vengono usati lo spazio dei nomi e i prefissi. – Lucero

+0

@Lucero - in base all'XML di origine non c'è spazio dei nomi, ma in questo caso si ha la funzione "nome locale" – Dewfy

+2

sì, e le interruzioni di nome locale() anche perché corrisponderanno a elementi di qualsiasi spazio dei nomi anziché a un nome di elemento specifico. Dato che i campioni pubblicati qui sono spesso semplificati (abbastanza ovvio qui) non sarei così sicuro che non verranno utilizzati spazi dei nomi, e anche se qualcuno googles e trova questa risposta dovrebbero essere consapevoli che la soluzione non funziona con namespace. – Lucero

9

Con XPath 2.0 è possibile anche fare

/a/(* except b) 
Problemi correlati