当前位置:文档之家› xml文件导入数据库

xml文件导入数据库

--建表
CREATE TABLE PEOPLE
(
PERSONID VARCHAR2(10) PRIMARY KEY,
NAME VARCHAR2(20),
ADDRESS VARCHAR2(60),
TEL VARCHAR2(20),
FAX VARCHAR2(20),
EMAIL VARCHAR2(40)
);

--从xml文件载入数据保存到数据库的过程
create or replace procedure xml2db(xmlfile varchar2) as
p xmlparser.Parser;
doc xmldom.DOMDocument;
n xmldom.DOMNode;
nl xmldom.DOMNodeList;
len number;
--根据PERSON结点生成插入SQL语句的过程
function insertsql(node xmldom.DOMNode) return varchar2
is
n xmldom.DOMNode;
nl xmldom.DOMNodeList;
len number;
nnm xmldom.DOMNamedNodeMap;
isql varchar2(200);
begin
--取得PERSON结点所有属性
nnm := xmldom.getAttributes(node);
isql := 'insert into people values(';
isql := isql || '''';
--取得所有属性中的第一个属性,即"PERSONID",并拼接到SQL语句中
isql := isql || xmldom.getNodeValue(xmldom.item(nnm,0));
isql := isql || '''';
--取得PERSON结点下的所有结点,准备遍历
nl := xmldom.getChildNodes(node);
len := xmldom.getLength(nl);
for i in 0..len-1 loop
--取出第i个结点
n := xmldom.item(nl,i);
isql := isql || ',';
isql := isql || '''';
--将结点的文本值取出并拼接到SQL语句中
isql := isql || xmldom.getNodeValue(xmldom.getFirstChild(n));
isql := isql || '''';
end loop;
isql := isql || ')';
return isql;
end insertsql;
begin
p := xmlparser.newParser;
xmlparser.parse(p,xmlfile);
--转换xml文件成DOM对像
doc := xmlparser.getDocument(p);
xmlparser.freeParser(p);
--取出所有PERSON元素
nl := xmldom.getElementsByTagName(doc,'PERSON');
len := xmldom.getLength(nl);
--清空people表的内容
delete from people;
for i in 0..len-1 loop
--取出第i个PERSON元素
n := xmldom.item(nl,i);
--执行插入该PERSON元素所用的SQL语句
execute immediate insertsql(n);
end loop;
commit;
xmldom.freeDocument(doc);
end xml2db;
/

--将数据库中的数据导出成xml文件的过程
create or replace procedure db2xml(xmlfile varchar2) as
doc xmldom.DOMDocument;
ret xmldom.DOMNode;
peoplenode xmldom.DOMNode;
--遍历整个people表的游标
Cursor cur_people is select * from people;
--将people表中一行记录转换为元素
--并插入到DOM文档对像根结点PEOPLE下的过程
procedure addperson(doc xmldom.DOMDocument,people xmldom.DOMNode,
v_pid varchar2,v_name varchar2,v_addr varchar2,
v_tel varchar2,v_fax varchar2,v_email varchar2)
is
personelem xmldom.DOMElement;
personnode xmldom.DOMNode;
itemelem xmldom.DOMElement;
itemnode xmldom.DOMNode;
text xmldom.DOMText;
begin
--创建PERSON结点
personelem := xmldom.createElement(doc,'PERSON');

--设置PERSONID属性
xmldom.setAttribute(personelem,'PERSONID',v_pid);
personnode := xmldom.appendChild(peoplenode,xmldom.makeNode(personelem));
--向PERSON结点中添加NAME元素
itemelem := xmldom.createElement(doc,'NAME');
-- 将NAME结点添加到PERSON结点中
itemnode := xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
-- 创建文本结点
text := xmldom.createTextNode(doc,v_name);
-- 将文本结点添加到NAME结点下,以构成完整NAME元素
itemnode := xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加ADDRESS元素
itemelem := xmldom.createElement(doc,'ADDRESS');
itemnode := xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text := xmldom.createTextNode(doc,v_addr);
itemnode := xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加TEL元素
itemelem := xmldom.createElement(doc,'TEL');
itemnode := xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text := xmldom.createTextNode(doc,v_tel);
itemnode := xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加FAX元素
itemelem := xmldom.createElement(doc,'FAX');
itemnode := xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text := xmldom.createTextNode(doc,v_fax);
itemnode := xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加EMAIL元素
itemelem := xmldom.createElement(doc,'EMAIL');
itemnode := xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text := xmldom.createTextNode(doc,v_email);
itemnode := xmldom.appendChild(itemnode,xmldom.makeNode(text));
end addperson;
begin
--创建一个新DOM文档对像
doc := xmldom.newDOMDocument;
--为文档添加根结点PEOPLE
peoplenode := xmldom.makeNode(xmldom.createElement(doc,'PEOPLE'));
ret := xmldom.appendChild(xmldom.makeNode(doc),peoplenode);
--使用游标遍历people中的每行,生成每一行对应的PERSON元素并添加到PEOPLE根结点中
for v_row in cur_people loop
addperson(doc,peoplenode,v_row.personid,v_https://www.doczj.com/doc/1d10893715.html,,
v_row.address,v_row.tel,v_row.fax,v_row.email);
end loop;
--将结果写入指定文件
xmldom.writeToFile(doc,xmlfile);
xmldom.freeDocument(doc);
end db2xml;

相关主题
文本预览
相关文档 最新文档