2017-01-08 3 views
0
<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Header> 
    <si xmlns="http://tempuri.org">LOCALE=,USERID=</si> 
</soap:Header> 
    <soap:Body> 
    <ns2:data xmlns:ns2="http://service/"> 
     <return> 
      <id>10010</id> 
      <approvementDate>16.06.2011 - 17:02:08</approvementDate> 
      <currentYear>2010</currentYear> 
      <resultCode>Success</resultCode> 
     </return> 
    </ns2:data> 
    </soap:Body> 
</soap:Envelope> 

Мне нужно извлечь узел тела XML-с помощью PLSQL, ниже кода работает отлично для заголовкаExtract тела ответа мыльного

 extract('/soap:Envelope/soap:Header/child::node()','xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"'); 

, но я не мог получить тело этого кода

 extract('/soap:Envelope/soap:Header/soap:Body/child::node()','xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"'); 

Благодарим за помощь.

ответ

0

Тело и заголовок являются прямым потомком корневого узла. Вы пытаетесь получить узел Body под узел заголовка. Нет такого дочернего узла заголовка, поэтому вы не получите никакого результата.

Путь должен быть:

extract('/soap:Envelope/soap:Body/child::node()','xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"'); 

, которая как часть/блока PL SQL (с выдуманным таблицы, колонки и имена переменных) получат:

declare 
    l_doc xmltype; 
    l_body xmltype; 
begin 
    select xml_col into l_doc from your_table; 
    l_body := l_doc.extract('/soap:Envelope/soap:Body/child::node()', 
    'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"'); 
    dbms_output.put_line(l_body.getstringval); 
end; 
/

PL/SQL procedure successfully completed. 

<ns2:data xmlns:ns2="http://service/"> 
    <return> 
    <id>10010</id> 
    <approvementDate>16.06.2011 - 17:02:08</approvementDate> 
    <currentYear>2010</currentYear> 
    <resultCode>Success</resultCode> 
    </return> 
</ns2:data> 
+0

большое спасибо , Я также пробовал этот путь, но я ошибался, проверяя результат с самого начала. – erolusengul