できます 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;
ただし、extractvalue
非推奨
;したがって、XMLQuery
を使用する必要があります。 :
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;
どちらの方法でも、デフォルトのsoap
を指定する必要があります 名前空間。
複数ビットのデータを抽出する場合は、XMLTableを使用することもできます。ここではあまり追加されませんが、次のようになります:
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 '.');