2010-01-28 11 views

Respuesta

81

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

+2

+1 para el buen uso del eje 'self';) – Lucero

+2

@Lucero: le debo @Tomalak por esa idea :) – AakashM

+0

Gracias por el crédito. :) – Tomalak

1

Xpath se verá:

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

Por lo tanto, seleccionar a los niños de 'a', cuyo nombre no es igual 'b'

+3

Esto se rompe cuando se usan espacios de nombres y prefijos. – Lucero

+0

@Lucero - de acuerdo con la fuente XML no hay espacio de nombres, pero si es así, tiene la función "nombre local" – Dewfy

+2

, y local-name() también se rompe porque coincidirá con elementos de cualquier espacio de nombre en lugar de un nombre de elemento específico. Dado que las muestras publicadas aquí a menudo se simplifican (bastante obvio aquí), no estoy tan seguro de que no se usarán espacios de nombres, e incluso si alguien busca y encuentra esta respuesta, debe saber que su solución no funciona con espacios de nombres. – Lucero

9

Con XPath 2.0 se puede incluso hacer

/a/(* except b) 
Cuestiones relacionadas