2013-02-28 15 views
7

Ho un XML comeSelezionare nodo senza spazio dei nomi con XPath

<root xmlns:ns1="http://foo"> 
    <ns1:child1>Text</ns1:child1> 
    <ns1:child2>Number</ns1:child2> 
</root> 

ora ho questo da persone diverse, in modo che, ad esempio persona 2 mi invia un altro messaggio con la stessa struttura come

<root xmlns:anotherNs="http://foo"> 
    <anotherNs:child1>Another Text</anotherNs:child1> 
    <anotherNs:child2>Another Number</anotherNs:child2> 
</root> 

Quindi l'unica differenza è il nome del namespace. Come posso selezionare il contenuto di child2 per entrambi gli xml con un'espressione XPath?

Qualcosa come "/ root/child2" o "// child2" non ha funzionato.

risposta

15

Utilizzare la funzione local-name() in questo modo:

//*[local-name()='child2'] 
0

È possibile associare qualsiasi prefisso che gradite (dire banana) allo spazio dei nomi "http://foo", e l'espressione /root/banana:child2 troverà l'elemento child2, indipendentemente da quale prefisso dello spazio dei nomi è stata usato nel documento sorgente. Solo l'URI dello spazio dei nomi deve corrispondere.

Problemi correlati