2012-05-30 11 views
18

La domanda è abbastanza sciocca, ma sono completamente bloccato. Voglio estrarre i nodi figli di un nodo in base a una condizione. L'XML è la seguente:Xpath: selezionare il nodo in base a una condizione (con nome-locale())

<a> 
<aCode>aaa</aCode> 
<aValue>bbb</aValue> 
</a> 

L'espressione è evidente: //a[aCode='aaa']

Ma non può ottenere come dovrei cambiarlo se è con i namespace e ho avuto modo di usare local-name(). Ho provato la seguente alle http://www.xmlme.com/XpathTool.aspx e dà un errore di analisi:

/*[local-name()='a'][[local-name()='aCode']='aaa'] 

Qualcuno ha idea di che cosa devo fare?

+0

local-name() è molto fastidioso! XPath perde tutta la sua eleganza quando inizi a utilizzare i namespace ... ma questa era una domanda utile – ropata

risposta

9

Prova questa

/a/aCode[text()='aaa'] 

o

//*[local-name() = 'aCode' and text() = 'aaa'] 

È stata utilizzata // al posto sbagliato.

+0

Grazie! Volevo solo avere entrambi i bambini. – gisly

34

Probabilmente significava

//*[local-name()='a'][*[local-name()='aCode']='aaa'] 
+0

Sì, funziona, grazie mille! – gisly

+0

Ecco cosa significa '*' - '[* [local-name() = 'aCode'] = 'aaa']'? Aiutami a capire per favore! –

+1

'*' sta per "qualsiasi elemento". – choroba

0

Questo lavoro:

//*[local-name()='a'][*[local-name()='acode' and text()='a2']] 

e anche questa:

//*[local-name()='a'][aCode[text()='a2']] 
Problemi correlati