SOAP响应中XPath查询有什么问题?

7
我需要创建一个XPath查询,它将返回在“availability”元素下列出的所有内容。
    <?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查询返回了“malformed xpath expression”错误信息,查询如下:

//xsi:[soap:body]//Availability
4个回答

19

你需要在XPath引擎中为 http://schemas.livebookings.net/x/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中最常见的问题之一。

搜索“XPath默认命名空间”以获取更详细的解释。


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中提取节点值时,这段代码对我很有用。


0

感谢 @Kirill Polishchuk

然而,如果你只想提取列表中的一个值,可以这样做:

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

或者对于最后一个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接