2013-05-23 19 views
10

W tym pliku XML protokołu SOAP, w jaki sposób można uzyskać 7 przy użyciu zapytania XPath?Uzyskiwanie elementów z domyślną przestrzenią nazw (bez przedrostka przestrzeni nazw) przy użyciu 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> 

To zapytanie XPath nie działa //*[name() ='soap:Body'].

+0

co próbujesz wyodrębnić? –

+0

nie jest problemem – user2411903

+0

brakuje <. ale to nie problem. Chcę numer 7 – user2411903

Odpowiedz

18

Jeśli masz zestaw nazw prefiksu, można go używać, jak:

//soap:Body 

Ale ponieważ węzłów ty próbują dostać użyć domyślnej przestrzeni nazw bez prefiksu, stosując zwykły XPath, możesz je uzyskać tylko za pomocą atrybutów local-name() i . Przykłady:

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

Lub:

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

Lub:

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

do Twojego XML, wszystkie one dają ten sam rezultat, tekst 7.

+0

** Uwaga: ** Jeśli używasz narzędzia do wykonania XPath, możesz określić przestrzeń nazw dla tego zapytania i postępować jak zwykle (bez powyższych obejść). Nie trzeba dodawać, że każde narzędzie ma określony sposób ustawienia tego. – acdcjunior

+0

świetnie, dziękuję bardzo – user2411903

+0

Czy ta składnia działa tylko wtedy, gdy węzeł z xmlns = "cokolwiek" jest ostatnim węzłem? Próbowałem już dzisiaj tego powtarzanego czasu i nie mogę go uruchomić. –

Powiązane problemy