oracle xmldom转字符串,Oracle xml 转换

select * from pdpla_approve_proj;

create or replace procedure proj_xml(st_id varchar2)

is

pro_rows pdpla_approve_proj%rowtype;--行游标

tempsql varchar2(100) :='select * from pdpla_approve_proj where  st_id='''||st_id||'''';--

type cur is ref cursor;--自定义游标

proj_cur cur ;--自定义游标实例

doc xmldom.DOMDocument := xmldom.newDOMDocument;--文档对象

doc_node xmldom.DOMNode := xmldom.makeNode(doc);--文档节点

root_ele xmldom.DOMElement := xmldom.createElement(doc,'root');--文档根元素

st_pro_ele xmldom.DOMElement;

project_ele xmldom.DOMElement;

st_pro_node xmldom.DOMNode;

root_node xmldom.DOMNode;

project_node xmldom.DOMNode;

t_node xmldom.DOMNode;

cnt number :=1;

buf varchar2(1000);

begin

dbms_output.put_line('tempsql'||tempsql);

root_node := xmldom.appendChild(doc_node,xmldom.makeNode(root_ele));

xmldom.setAttribute(root_ele,'id',st_id);

open proj_cur for tempsql;--打开游标

loop

fetch proj_cur into pro_rows;

exit when proj_cur%notfound;

project_ele := xmldom.createElement(doc,'project');

project_node := xmldom.appendChild(root_node,xmldom.makeNode(project_ele));

st_pro_ele := xmldom.createElement(doc,'st_pro_id');

st_pro_node := xmldom.appendChild(project_node,xmldom.makeNode(st_pro_ele));

t_node := xmldom.appendChild(st_pro_node,xmldom.makeNode(xmldom.createTextNode(doc,pro_rows.st_project_id)));

st_pro_ele := xmldom.createElement(doc,'st_info_type');

st_pro_node := xmldom.appendChild(project_node,xmldom.makeNode(st_pro_ele));

t_node := xmldom.appendChild(st_pro_node,xmldom.makeNode(xmldom.createTextNode(doc,pro_rows.st_info_type)));

cnt :=cnt+1;

end loop;

close proj_cur;

xmldom.writeToBuffer(doc,buf);

xmldom.freeDocument(doc);

dbms_output.put_line('cnt'||cnt);

dbms_output.put_line('doc'||buf);

exception

when others then

dbms_output.put_line('sqlerrm'||sqlerrm);

end;

create or replace procedure p_parse (ID in varchar2) is

--创建xml解析器实例xmlparser.Parser

xmlPar xmlparser.Parser :=xmlparser.newParser;

--定义DOM文档

xDoc xmldom.DOMDocument;

--定义DATA子节点数目变量

lenItme integer;

--定义节点列表,存放DATA节点们

itemNodes xmldom.DOMNodeList;

--定义节点列表,存放DATA子节点们

childNodes xmldom.DOMNodeList;

--定义节点,存放单个DATA节点

itemNode xmldom.DOMNode;

--定义属性变量,存放节点属性

itemArrMap xmldom.DOMNamedNodeMap;

--定义其他变量,存放子节点的值

name varchar(100);

value varchar(100);

newid NUMBER(10);

--定义clob变量,存放xml字符串para_name

xmlStr clob;

begin

for cur in (select t.xml_data para_name ,t.id from xmldata t where t.id=ID )

--从xmldata表中查询数据,id不是唯一标识,一个id可查出多条数据(XML中多条数据),故用loop循环

loop

--获取para_name中的xml字符串

xmlStr:=cur.para_name;

xmlPar :=xmlparser.newParser;

--解析xmlStr中xml字符串,并存放到xmlPar中

xmlparser.parseClob(xmlPar, xmlStr);

--将xmlPar中的数据转存到dom文档中

xDoc:=xmlparser.getDocument(xmlPar);

xmlparser.freeParser(xmlPar); --释放解析器实例

--获取所有DATA节点

itemNodes:=xmldom.getElementsByTagName(xDoc,'DATA');

--获取DATA节点的个数

lenItme :=xmldom.getLength(itemNodes);

--遍历所有的DATA节点

for i in 0..lenItme-1

loop

begin

--获取节点列表中的第i个DATA节点

itemNode:=xmldom.item(itemNodes,i);

--获取第i个DATA节点的所有子节点

childNodes:=xmldom.getChildNodes(itemNode);

--获取所有子节点的值

newid:=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(childNodes,0)));

name:=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(childNodes,1)));

value:=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(childNodes,2)));

--将子节点的值newid,name,value存放到xmltest

insert into xmltest values(newid,name,value);

commit;

end;

end loop;

end loop;

--是否dom文档

xmldom.freeDocument(xDoc);

--异常和错误处理

EXCEPTION

WHEN OTHERS THEN

DBMS_output.PUT_LINE(SQLERRM);

end p_parse;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值