2010-10-11 10 views
5

Un piuttosto semplice problema ... frammento XML:Come si selezionano i nodi che NON hanno un nodo figlio particolare?

<bean id='Juicer'> 
    <property name="electric"> 
     <value>false</value> 
    </property> 
</bean> 

<bean id='Oven'> 
    <property name="electric"> 
     <value>true</value> 
    </property> 
    <property name="wattage"> 
     <value>1000</value> 
    </property> 
</bean> 

Sto cercando di scrivere una query XPath che selezionerà tutti bean s che non hanno un <property name="wattage">.

Non riesco a capire come dire "fagioli che non hanno questo figlio" in xpath.

Nota che non posso fare affidamento sulla proprietà "elettrica" ​​per essere falsa ogni volta che il "wattaggio" è assente. (inoltre, questo esempio è un po 'inventato).

Grazie :)

+0

@ Here-Be-Wolves: buona domanda (+1). Vedi la mia risposta per l'espressione XPath più semplice/più breve finora, e la sua spiegazione. –

risposta

5

Va bene, dopo un po 'di scavo ho capito:

//bean[not (property[@name='wattage'])] 

Semplice anzi: P

+0

@ Here-Be-Wolves: Un piccolo problema: non c'è un elemento chiamato 'beans' nel codice XML fornito ... –

+0

ovviamente intendevo" bean ". grazie per avermelo fatto notare – jrharshath

3

Prova

//bean[not(property[@name='wattage'])] 
1

Nel caso in cui la corrente nodo è l'elemento principale degli elementi bean, un'espressione XPath che seleziona gli elementi desiderati è:

bean[not(property/@name = 'wattage')] 

Questo è probabilmente il più semplice tale espressione (ha solo un singolo predicato).

Questa espressione tradotta in inglese dice:

Selezionare tutti bean figli del nodo corrente per i quali non name attributo di qualsiasi dei loro figli property è la stringa "wattage".

0
//bean[not(@name = 'wattage')] 
+1

Credo che questa query restituirà nodi come '', perché esiste una proprietà ('electric') il cui @name non è' wattage'. –

Problemi correlati