Мне нужно создать запрос 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
Вам необходимо определить префикс для http://schemas.livebookings.net/Ingrid/version2/2007/06/ пространства имен в вашем движке XPath, например префикс a, затем:
http://schemas.livebookings.net/Ingrid/version2/2007/06/
a
//a:Availability
Он выберет a:Availability элемент.
a:Availability
Или вы можете использовать этот XPath:
//*[local-name() = 'Availability']
Мне нужно создать запрос xpath, который будет возвращать все перечисленное при наличии элемента
Используйте
/*/Soap:Body/x:GetAvailableTimesResult/x:Availability/node()
Где в вашей программе вы связали (зарегистрирован) префикс "x" с пространством имен "http://schemas.livebookings.net/Ingrid/version2/2007/06/".
"x"
"http://schemas.livebookings.net/Ingrid/version2/2007/06/"
Это наиболее часто задаваемые вопросы в XPath.
Выполните поиск «пространства имен XPath по умолчанию», чтобы получить более подробное объяснение.
Вы должны предоставить правильное пространство имен с вашим 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/"'));
Этот код работал для меня при извлечении значения узла из XML-ответа SOAP.
Благодаря @Kirill Polishchuk
Однако, если вы хотите извлечь только одно значение из списка, вы можете сделать:
//*[local-name() = 'Availability'][position()=1]
или для последнего:
//*[local-name() = 'Availability'][last()]