2010-11-08 20 views
28

Come faccio a scegliere come target tutti gli elementi in un documento eccetto un particolare nome di elemento?XPath per ottenere tutti gli elementi figlio tranne uno con un nome specifico?

Ad esempio, desidero escludere gli elementi terminate. Possono verificarsi in tutto il documento.

<root> 
    <terminate attr="1" /> 
    <other> 
     The brown fox jumps over the fence. 
     <terminate> 
      <b>stuff</b> 
     </terminate> 
    </other> 
</root> 

Ho provato con l'operatore not(..) senza successo probabilmente perché sto utilizzando nel modo sbagliato.

E francamente provare a Google "non" è difficile!

risposta

41

Di seguito XPath dovrebbe funzionare

/root/*[not(self::terminate)] 

Inoltre, penso che si può fare con questo pure

/root/*[not(name()='terminate')] 
+1

Per selezionare * tutti * gli elementi, qualsiasi punto del documento, utilizzare questo: '// * [non (self :: a)]' – jpadvo

+8

"Non posso terminare sé" =) – roryok

1

Se si utilizza XPath 2.0 è possibile utilizzare

/root/* except /root/terminate 

Che cosa ti aspetti? Corrisponde ai nodi presenti nella prima sequenza ma non alla seconda.

XPath 2.0 Specification - except operator

Problemi correlati