2011-10-17 52 views
6

我需要創建一個xpath查詢,它將返回availabilty元素下列出的所有內容。SOAP響應中的XPath查詢有什麼問題

<?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> 

我的XPath查詢返回格式不正確的XPath表達式的錯誤信息,查詢如下:

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

回答

14

您需要在您的XPath引擎,例如定義爲前綴命名http://schemas.livebookings.net/Ingrid/version2/2007/06/前綴a,則:

//a:Availability 

這將選擇a:Availability元素。

或者你可以用這個XPath:

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

我需要創建一個XPath查詢將返回所有庫存狀況元素中列出

使用

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

在您的程序中,您已將(已註冊)"x"前綴與"http://schemas.livebookings.net/Ingrid/version2/2007/06/"名稱空間關聯。

這是XPath中最常見的FAQ。

搜索「XPath默認命名空間」以獲取更詳細的解釋。

0

由於@Kirill舒克

但是,如果要提取列表中只有一個值,你可以這樣做:

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

或最後一個:

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

您需要爲您的XPath提供正確的名稱空間。希望以下代碼塊將幫助你。

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/"')); 

當從SOAP響應XML中提取節點值時,此代碼適用於我。