create or replace procedure UserInfoEduceXMLFile (outfile varchar2 := 'e:/oracle')
as
doc xmldom.DOMDocument;--定义doc文档
main_node xmldom.DOMNode;--定义一个文档节点
root_node xmldom.DOMNode;--定义根节点
User_node xmldom.DOMNode;--定义User节点
item_node xmldom.DOMNode;--定义User下的子节点集合
root_elmt xmldom.DOMElement;--定义根元素
item_elmt xmldom.DOMElement;
item_text xmldom.DOMText;
-- 定义选择记录的游标
cursor cur_getUserInfo is select USERID,NICKNAME,USERNAME,
USERPWD,GENDER,ADDRESS,PHONE,ENROLTIME from userinfo;
begin
/***********
1 创建文档
***********/
doc := xmldom.newDOMDocument;-- 创建文档对象
main_node := xmldom.makeNode(doc);-- 获得文档节点
root_elmt := xmldom.createElement(doc,'UserInfo');-- 创建根元素
root_node := xmldom.appendChild(main_node,xmldom.makeNode(root_elmt));-- 向文档节点加入根节点
/*****************
2 用循环游标将UserInfo 下的所有子节点添加到User父节点中
****************/
for V_UserInfo in cur_getUserInfo loop
-- 创建 User 元素
item_elmt := xmldom.createElement(doc,'User');
-- 设置 User 元素的 USERID 属性
xmldom.setAttribute(item_elmt,'USERID',V_UserInfo.USERID);
--将User 元素 加如根节点
User_node := xmldom.appendChild(root_node,xmldom.makeNode(item_elmt));
-- 加入 NICKNAME 节点
item_elmt := xmldom.createElement(doc,'NICKNAME');
item_node := xmldom.appendChild(User_node,xmldom.makeNode(item_elmt));
-- 加入文本节点
item_text := xmldom.createTextNode(doc,V_UserInfo.NICKNAME);
item_node := xmldom.appendChild(item_node,xmldom.makeNode(item_text));
-- 加入 USERNAME 节点
item_elmt := xmldom.createElement(doc,'USERNAME');
item_node := xmldom.appendChild(User_node,xmldom.makeNode(item_elmt));
item_text := xmldom.createTextNode(doc,V_UserInfo.USERNAME);
item_node := xmldom.appendChild(item_node,xmldom.makeNode(item_text));
-- 加入 USERPWD 节点
item_elmt := xmldom.createElement(doc,'USERPWD');
item_node := xmldom.appendChild(User_node,xmldom.makeNode(item_elmt));
item_text := xmldom.createTextNode(doc,V_UserInfo.USERPWD);
item_node := xmldom.appendChild(item_node,xmldom.makeNode(item_text));
-- 加入 GENDER 节点
item_elmt := xmldom.createElement(doc,'GENDER');
item_node := xmldom.appendChild(User_node,xmldom.makeNode(item_elmt));
item_text := xmldom.createTextNode(doc,V_UserInfo.GENDER);
item_node := xmldom.appendChild(item_node,xmldom.makeNode(item_text));
-- 加入 ADDRESS 节点
item_elmt := xmldom.createElement(doc,'ADDRESS');
item_node := xmldom.appendChild(User_node,xmldom.makeNode(item_elmt));
item_text := xmldom.createTextNode(doc,V_UserInfo.ADDRESS);
item_node := xmldom.appendChild(item_node,xmldom.makeNode(item_text));
-- 加入 PHONE 节点
item_elmt := xmldom.createElement(doc,'PHONE');
item_node := xmldom.appendChild(User_node,xmldom.makeNode(item_elmt));
item_text := xmldom.createTextNode(doc,V_UserInfo.PHONE);
item_node := xmldom.appendChild(item_node,xmldom.makeNode(item_text));
-- 加入 ENROLTIME 节点
item_elmt := xmldom.createElement(doc,'ENROLTIME');
item_node := xmldom.appendChild(User_node,xmldom.makeNode(item_elmt));
item_text := xmldom.createTextNode(doc,V_UserInfo.ENROLTIME);
item_node := xmldom.appendChild(item_node,xmldom.makeNode(item_text));
end loop;
/***********
3 保存文档、 释放资源
***********/
xmldom.setVersion(doc,'1.0');
xmldom.writeToFile(doc,outfile,'GB2312');--将文档对象保存到外部文件中
xmldom.freeDocument(doc);--释放资源
end UserInfoEduceXMLFile;
--测试
begin
UserInfoEduceXMLFile('ZHULIANGPATH'||'/ZhuLiangUserInfo.xml');
end;