2011-10-17 21 views
6

Geçerli bir öğe altında listelenen her şeyi döndürecek bir xpath sorgusu oluşturmanız gerekiyor.SOAP yanıtında XPath sorgusunda sorun nedir?

<?xml version="1.0" encoding="UTF-8"?> 
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
      <GetAvailableTimesResult xmlns="http://schemas.test.net/x/version2/2007/06/" resultcode="SearchOk"> 
     <Availability> 
     <Result available="true" time="2011-10-17T17:00:00"/> 
     <Result available="true" time="2011-10-17T17:15:00"/> 
     <Result available="true" time="2011-10-17T17:30:00"/> 
     <Result available="true" time="2011-10-17T17:45:00"/> 
     <Result available="true" time="2011-10-17T18:00:00"/> 
     <Result available="true" time="2011-10-17T18:15:00"/> 
     <Result available="true" time="2011-10-17T18:30:00"/> 
     <Result available="true" time="2011-10-17T18:45:00"/> 
     <Result available="true" time="2011-10-17T19:00:00"/> 
     <Result available="true" time="2011-10-17T19:15:00"/> 
     <Result available="true" time="2011-10-17T19:30:00"/> 
     <Result available="true" time="2011-10-17T19:45:00"/> 
     <Result available="true" time="2011-10-17T20:00:00"/> 
     <Result available="true" time="2011-10-17T20:15:00"/> 
     <Result available="true" time="2011-10-17T20:30:00"/> 
     <Result available="true" time="2011-10-17T20:45:00"/> 
     <Result available="true" time="2011-10-17T21:00:00"/> 
     <Result available="true" time="2011-10-17T21:15:00"/> 
     <Result available="true" time="2011-10-17T21:30:00"/> 
     <Result available="true" time="2011-10-17T21:45:00"/> 
     <Result available="true" time="2011-10-17T22:00:00"/> 
     <Result available="true" time="2011-10-17T22:15:00"/> 
     <Result available="true" time="2011-10-17T22:30:00"/> 
      </Availability> 
       </GetAvailableTimesResult> 
     </soap:Body> 
</soap:Envelope> 

Benim xpath sorgusu hatalı biçimlendirilmiş xpath ifadesi hata mesajı, sorgu aşağıda sunulmuştur döndürür gibidir:

//xsi:[soap:body]//Availability 

cevap

14

Sen XPath motor, ör http://schemas.livebookings.net/Ingrid/version2/2007/06/ ad alanı öneki tanımlamanız gerekir Daha sonra önek a:

//a:Availability 

O a:Availability eleman seçecektir.

Yoksa bu XPath kullanabilirsiniz:

//*[local-name() = 'Availability'] 
1

Ben availabilty elemanı altında listelenmiş

kullanın şeyi dönecektir bir xpath sorgusu oluşturmak gerekir:

/*/Soap:Body/x:GetAvailableTimesResult/x:Availability/node() 

Programınızda, (kayıtlı) "http://schemas.livebookings.net/Ingrid/version2/2007/06/" ad alanına ilişkin "x" önekiyle ilişkilendirilmişsiniz.

Bu, XPath'teki en çok SSS'dur.

Daha ayrıntılı açıklama için "XPath varsayılan ad alanı" aramasını yapın. Listenin yalnızca bir değer ayıklamak istiyorsanız

Ancak @Kirill Polishchuk için

0

sayesinde bunu yapabilirsiniz:

//*[local-name() = 'Availability'][position()=1] 

ya sonuncusu için:

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

XPath'ınızla doğru ad alanı sağlamanız gerekir. Umarım kod bloğu size yardımcı olacaktır. SOAP yanıtı XML düğüm değerini ayıklanması zaman

v_Value := DBMS_XMLDOM.GetNodeValue(XslProcessor.SelectSingleNode(v_RootNode, '/soap:Envelope/soap:Body/GetLiveAnalysisIDSResponse[1]/AnalysisIDs[1]/guid[1]/text()' 
    ,'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="https://www.dummynet.net/"')); 

Bu kod benim için çalıştı.