提取肥皂反应

时间:2017-01-08 18:46:08

标签: xml oracle soap plsql extract

<?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>

我需要使用plsql提取xml的body节点,下面的代码适用于Header

     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/"');

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Body和Header都是根节点的直接后代。您正在尝试在下添加一个Body节点一个Header节点.Hader没有这样的子节点,所以没有结果。

路径应该是:

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>