XPath

2013-05-23 8 views
10

kullanarak varsayılan ad alanına sahip öğeler (ad alanı öneki yok) alma Bu SOAP XML dosyasında, bir XPath sorgusu kullanarak 7'u nasıl edinebilirim?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> 

Bu XPath sorgusu //*[name() ='soap:Body'] çalışmıyor. Eğer bir ad alanı öneki kümesi varsa

+0

Ne elde etmeye çalışıyorsunuz? –

+0

sorun değil – user2411903

+0

değil <. ama sorun değil. Numarayı istiyorum 7 – user2411903

cevap

18

, şöyle kullanabilirsiniz:

//soap:Body 

Ama düz XPath kullanarak bir öneki olmadan bir varsayılan ad kullanmak almak için çalışıyoruz düğümler, çünkü

, Bunları yalnızca local-name() ve namespace-uri() öznitelikleri aracılığıyla açabilirsiniz. Örnekler:

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

Veya:

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

Veya: xml için

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

, hepsi aynı sonucu verecektir metin 7.

+0

** Not: ** XPath'ı yürütmek için bir araç kullanıyorsanız, bu sorgu için ad alanını belirtebilir ve her zamanki gibi devam edebilirsiniz (yukarıdaki geçici çözümler olmaksızın). Söylemeye gerek yok, her aracın bunu belirlemesi için belirli bir yolu var. – acdcjunior

+0

Mükemmel, çok teşekkürler – user2411903

+0

Bu sözdizimi sadece xmlns = "neyse" olan düğüm son düğüm mü? Bugün defalarca denedim ve işe yaramayacağım. –