Je kunt doe dit met extractvalue
:
select extractvalue(
xmltype(response_string),
'/soap:Envelope/soap:Body/getAddressForIpResponse/p-address',
'xmlns="urn:USR1" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"')
from dual;
maar extractvalue
is verouderd
; dus je moet XMLQuery
gebruiken :
select XMLQuery(
'declare default element namespace "urn:USR1";
declare namespace soap="http://schemas.xmlsoap.org/soap/envelope/";
/soap:Envelope/soap:Body/getAddressForIpResponse/p-address/text()'
passing xmltype(response_string)
returning content).getStringval()
from dual;
Hoe dan ook, je moet de standaard en soap
. opgeven naamruimten.
Je zou ook XMLTable kunnen gebruiken als je meerdere bits data extraheert; hier voegt het niet veel toe, maar het zou zoiets zijn als:
select ip_address
from XMLTable (
XMLNamespaces (
default 'urn:USR1',
'http://schemas.xmlsoap.org/soap/envelope/' as "soap"
),
'/soap:Envelope/soap:Body/getAddressForIpResponse/p-address'
passing xmltype(response_string)
columns ip_address varchar2(15) path '.');