ответ на XML-запрос мыльного веб-сервиса для сохранения в таблице - PullRequest
0 голосов
/ 16 апреля 2019

Я вызываю сервис Soap в plsql, и я получаю ответ в формате xml, хочу проанализировать xml и сохранить одно значение в таблице Oracle.Ниже xml output:

<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
   <s:Header>
      <ActivityId xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics" CorrelationId="3c08103b-65da-4f34-95e7-ec2c90ba5b74">00000000-0000-0000-0000-000000000000</ActivityId>
      <o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="1">
         <u:Timestamp u:Id="_0">
            <u:Created>2019-04-16T20:21:06.467Z</u:Created>
            <u:Expires>2019-04-16T20:26:06.467Z</u:Expires>
         </u:Timestamp>
      </o:Security>
   </s:Header>
   <s:Body>
      <SaveSalesResponse xmlns="https://unifree.com.tr/services/custom">
         <SaveSalesResult xmlns:a="http://schemas.datacontract.org/2004/07/CustomServiceLibrary.DataContract" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:Result>true</a:Result>
            <a:Provision>
               <a:ProvisionNo>245982</a:ProvisionNo>
            </a:Provision>
         </SaveSalesResult>
      </SaveSalesResponse>
   </s:Body>
</s:Envelope>

Я хочу сохранить <a:ProvisionNo>245982</a:ProvisionNo> это число в таблице. Пожалуйста, предложите простой способ сохранить значение в таблице

1 Ответ

0 голосов
/ 17 апреля 2019

Исходя из предположения, что предоставленный вами пример документа представляет макет используемого документа (что существует только один <s:Body>, только один <SaveSalesResponse> и т. Д. Для одного <a:PorivisionNo> на документ,тогда EXTRACTVALUE - это все, что требуется.

Если ваш набор данных содержит более сложные структуры, содержащие несколько <a:ProvisionNo> для документа, я бы рекомендовал извлекать значения с помощью XMLQUERY / XMLTABLE.

Ниже приведен пример загрузки таблицы с помощью <a:ProvisionNo> через EXTRACTVALUE.

CREATE TABLE PROVISION_NO(THE_PROVISION_NO INTEGER);

Table created.

Затем запустите загрузку:

INSERT INTO PROVISION_NO(THE_PROVISION_NO)
SELECT EXTRACTVALUE( XMLTYPE('<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <s:Header>
        <ActivityId xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics" CorrelationId="3c08103b-65da-4f34-95e7-ec2c90ba5b74">00000000-0000-0000-0000-000000000000</ActivityId>
        <o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="1">
            <u:Timestamp u:Id="_0">
                <u:Created>2019-04-16T20:21:06.467Z</u:Created>
                <u:Expires>2019-04-16T20:26:06.467Z</u:Expires>
            </u:Timestamp>
        </o:Security>
    </s:Header>
    <s:Body>
        <SaveSalesResponse xmlns="https://unifree.com.tr/services/custom">
            <SaveSalesResult xmlns:a="http://schemas.datacontract.org/2004/07/CustomServiceLibrary.DataContract" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <a:Result>true</a:Result>
                <a:Provision>
                    <a:ProvisionNo>245982</a:ProvisionNo>
                </a:Provision>
            </SaveSalesResult>
        </SaveSalesResponse>
    </s:Body>
</s:Envelope>'),
    '/s:Envelope/s:Body/*:SaveSalesResponse/*:SaveSalesResult/a:Provision/a:ProvisionNo',
    'xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://schemas.datacontract.org/2004/07/CustomServiceLibrary.DataContract" ')
FROM DUAL;

1 row created.

И результат:

SELECT THE_PROVISION_NO FROM PROVISION_NO;

   THE_PROVISION_NO
___________________
             245982

1 row selected.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...