我需要创建一个xpath查询,它将返回availablebilty元素下列出的所有内容。
<?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
答案 0 :(得分:16)
您需要在XPath引擎中为http://schemas.livebookings.net/Ingrid/version2/2007/06/
命名空间定义前缀,例如:前缀a
,然后:
//a:Availability
它将选择a:Availability
元素。
或者您可以使用此XPath:
//*[local-name() = 'Availability']
答案 1 :(得分:1)
我需要创建一个xpath查询,它将返回列出的所有内容 在可用性元素下
使用强>:
/*/Soap:Body/x:GetAvailableTimesResult/x:Availability/node()
在您的计划中,您已将"x"
前缀与"http://schemas.livebookings.net/Ingrid/version2/2007/06/"
名称空间关联(已注册)。
这是XPath中最常见的FAQ。
搜索“XPath默认命名空间”以获得更详细的说明。
答案 2 :(得分:0)
感谢@Kirill Polishchuk
但是,如果您只想提取列表中的一个值,则可以执行以下操作:
//*[local-name() = 'Availability'][position()=1]
或最后一个:
//*[local-name() = 'Availability'][last()]
答案 3 :(得分: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中提取节点值时,此代码对我有用。