2013-05-23 47 views
10

In questo file XML SOAP, come posso ottenere 7 su una query XPath?Ottenere elementi con spazio dei nomi predefinito (nessun prefisso dello spazio dei nomi) utilizzando XPath

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <HelloWorldResponse xmlns="http://tempuri.org/"> 
      <HelloWorldResult>7</HelloWorldResult> 
     </HelloWorldResponse> 
    </soap:Body> 
</soap:Envelope> 

di query XPath Questo non funziona //*[name() ='soap:Body'].

+0

cosa stai cercando di estrarre? –

+0

non è il problema – user2411903

+0

mancante <. ma non è il problema. Voglio il numero 7 – user2411903

risposta

18

Se si dispone di un set di prefisso di namespace, si potrebbe usare, come:

//soap:Body 

Ma dal momento che i nodi che si sta tentando di ottenere utilizzare uno spazio dei nomi predefinita, senza un prefisso, utilizzando XPath pianura, puoi accedervi solo dagli attributi local-name() e namespace-uri(). Esempi:

//*[local-name()="HelloWorldResult"]/text() 

Oppure:

//*[local-name()="HelloWorldResult" and namespace-uri()='http://tempuri.org/']/text() 

Oppure:

//*[local-name()="HelloWorldResponse" and namespace-uri()='http://tempuri.org/']/*[local-name()="HelloWorldResult"]/text() 

Per il tuo XML, saranno tutti dare lo stesso risultato, il testo 7.

+0

** Nota: ** Se si stava utilizzando uno strumento per eseguire XPath, è possibile specificare lo spazio dei nomi per quella query e procedere come al solito (senza soluzioni alternative sopra). Inutile dire che ogni strumento ha un modo specifico di impostarlo. – acdcjunior

+0

eccellente, grazie mille – user2411903

+0

Questa sintassi funziona solo se il nodo con xmlns = "qualunque" è l'ultimo nodo? Ho provato questo ripetuto tempo oggi e non riesco a farlo funzionare. –

Problemi correlati