DECLARE
--:定义或确定要解析的XML规则,如上。
--步骤2:创建XML解析器实例XMLPARSER.parser,如下:
xmlpar xmlparser.parser := xmlparser.newparser;
--步骤3:定义DOM文档对象,如下:
doc xmldom.domdocument;
--步骤4:定义解析XML所需要的其他对象,如下:
lenunit INTEGER;
lenitem INTEGER;
unitnodes xmldom.domnodelist;
itemnodes xmldom.domnodelist;
chilnodes xmldom.domnodelist;
tempnode_unit xmldom.domnode;
tempnode xmldom.domnode;
temparrmap xmldom.domnamednodemap;
--================================
--以下变量用于获取XML节点的值
NAME VARCHAR2(50);
VALUE VARCHAR2(20);
tmp INTEGER;
--================================
xmlclobdata CLOB;
BEGIN
--步骤5:获取xml数据,以下假设从数据表的clob字段中获取取,如下:
BEGIN
xmlclobdata := '<?xml version="1.0" encoding="GBK" ?>
<items>
<unit>
<item>
<name>单位名称</name>
<value>JXDL</value>
</item>
<item>
<name>年新增归档数</name>
<value>330</value>
</item>
</unit>
</items>';
%****
' <?xml version="1.0" encoding="GBK" ?>
<parameters>
<RemittanceParameterItem>
<LeagueCompanyId>2001116</LeagueCompanyId>
<CompanyId>1000</CompanyId>
<RemittanceValue>65000.0</RemittanceValue>
<RemittanceToken>9591503</RemittanceToken>
<RemittanceDateTime>2018-09-26T14:51:22.0Z</RemittanceDateTime>
<Remark>640001391210002018</Remark>
</RemittanceParameterItem>
</parameters>';
**%
--步骤6:解析xml数据,如下
xmlpar := xmlparser.newparser;
--xmlparser.parseBuffer(xmlPar,xmlString);--
xmlparser.parseclob(xmlpar, xmlclobdata);
doc := xmlparser.getdocument(xmlpar);
-- 释放解析器实例
xmlparser.freeparser(xmlpar);
-- 获取所有unit元素
unitnodes := xmldom.getelementsbytagname(doc, 'parameters');
lenunit := xmldom.getlength(unitnodes);
dbms_output.put_line(lenunit);
--遍历所有unit元素
FOR i IN 0 .. lenunit - 1 LOOP
--获取第i个unit
tempnode_unit := xmldom.item(unitnodes, i);
itemnodes := xmldom.getchildnodes(tempnode_unit);
lenitem := xmldom.getlength(itemnodes);
dbms_output.put_line(lenitem);
FOR j IN 0 .. lenitem - 1 LOOP
tempnode := xmldom.item(itemnodes, j);
--获取子元素的值
chilnodes := xmldom.getchildnodes(tempnode);
tmp := xmldom.getlength(chilnodes);
NAME := xmldom.getnodevalue(xmldom.getfirstchild(xmldom.item(chilnodes,
0)));
VALUE := xmldom.getnodevalue(xmldom.getfirstchild(xmldom.item(chilnodes,
1)));
dbms_output.put_line(i || j || NAME || VALUE);
END LOOP;
END LOOP;
--步骤7:释放文档对象
xmldom.freedocument(doc);
--步骤8:异常与错误处理
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END;
END;