<?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/"');
感谢您的帮助。
答案 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>