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" ?>
单位名称
JXDL
年新增归档数
330
';
%****
' <?xml version="1.0" encoding="GBK" ?>
2001116
1000
65000.0
9591503
2018-09-26T14:51:22.0Z
640001391210002018
';
**%
--步骤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;
node