Вы можете использовать XMLQuery :
select xmlquery('declare namespace soap="http://www.w3.org/2003/05/soap-envelope"; (: :)
declare default element namespace "http://tempuri.org/"; (: :)
soap:Envelope/soap:Body/hasLoanResponse/hasLoanResult/text()'
passing
returning content).getstringval() as result
from dual;
Это объявляет пространства имен soap
и по умолчанию, чтобы они соответствовали соответствующим частям пути. Затем он извлекает текст узла, который вы ищете, и возвращает его как строку.
Итак, ваш образец документа поставляется в строке:
select xmlquery('declare namespace soap="http://www.w3.org/2003/05/soap-envelope"; (: :)
declare default element namespace "http://tempuri.org/"; (: :)
soap:Envelope/soap:Body/hasLoanResponse/hasLoanResult/text()'
passing xmltype('
true
')
returning content).getstringval() as result
from dual;
RESULT
----------
true
Если вы имеют XML в переменной PL / SQL, тогда это в основном одно и то же:
set serveroutput on
declare
l_xml xmltype := xmltype('
true
');
l_result varchar2(5);
begin
select xmlquery('declare namespace soap="http://www.w3.org/2003/05/soap-envelope"; (: :)
declare default element namespace "http://tempuri.org/"; (: :)
soap:Envelope/soap:Body/hasLoanResponse/hasLoanResult/text()'
passing l_xml
returning content).getstringval()
into l_result
from dual;
dbms_output.put_line(l_result);
end;
/
true
PL/SQL procedure successfully completed.
Если у вас есть документ XML в переменной CLOB или varchar2, просто измените его на:
passing xmltype(l_xml)
, используя ваше собственное имя переменной.