sql >> Database >  >> RDS >> Oracle

Oracle 12c XML haalt waarde uit antwoord

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.

db<>fiddle

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 '.');

db<>fiddle




  1. MariaDB JSON_ARRAY_INSERT() uitgelegd

  2. Werk een kolom bij met behulp van een geselecteerde subquery naar dezelfde tabel

  3. MySQL kopieert efficiënt alle records van de ene tabel naar de andere

  4. Welsprekende polymorfe relaties gebruiken om gegevens in Laravel te categoriseren