Oracle包XMLDOM创建XML文件及其缺点 (二)

2014-11-24 09:08:49 · 作者: · 浏览: 1
FINFO UTL_FILE.FILE_TYPE;
v_temp clob;
cursor c_table_info is
select name,eno from staff;
v_name varchar2(30);
v_eno integer;

doc XMLDOM.DOMDOCUMENT;
doc_node XMLDOM.DOMNODE;
root_node XMLDOM.DOMNODE;
user_node XMLDOM.DOMNODE;
item_node XMLDOM.DOMNODE;

root_elmt XMLDOM.DOMELEMENT;
user_elmt XMLDOM.DOMELEMENT;
item_elmt XMLDOM.DOMELEMENT;
item_text XMLDOM.DOMTEXT;

begin
--xml header
STAFFINFO :=utl_file.fopen_nchar('DIR','Test.xml','W',32767);--跟前面说的一样必须先创建一个directory才行
STAFFINFO :=utl_file.fopen_nchar(STAFFINFO ,'');
UTL_FILE.FFLUSH(STAFFINFO );--直接写入到磁盘文件中,不会停留在内存中
UTL_FILE.FCLOSE(STAFFINFO );

open c_table_info;
loop
fetch c_table_info into v_name,v_eno;
exit when c_table_info%notfound;

--XML节点
doc := XMLDOM.NEWDOMDOCUMENT;
xmldom.setVersion(doc, '1.0');
xmldom.setCharset(doc, 'UTF-8');
doc_node := XMLDOM.MAKENODE(doc);

user_elmt := XMLDOM.CREATEELEMENT(doc,'member');
user_node :=XMLDOM.APPENDCHILD(doc_node, XMLDOM.MAKENODE(user_elmt));

item_elmt :=XMLDOM.CREATEELEMENT(doc,'name');
item_node :=XMLDOM.APPENDCHILD(user_node, XMLDOM.MAKENODE(item_elmt));
item_text := XMLDOM.CREATETEXTNODE(doc,v_name);
item_node:=XMLDOM.APPENDCHILD(item_node, XMLDOM.MAKENODE(item_text));

item_elmt :=XMLDOM.CREATEELEMENT(doc,'eno');
item_node :=XMLDOM.APPENDCHILD(user_node, XMLDOM.MAKENODE(item_elmt));
item_text := XMLDOM.CREATETEXTNODE(doc,eno);
item_node:=XMLDOM.APPENDCHILD(item_node, XMLDOM.MAKENODE(item_text));

v_temp :=' ';
--写入到临时变量v_temp中
XMLDOM.WRITETOCLOB(doc,v_temp);
STAFFINFO :=utl_file.fopen_nchar('DIR','Test.xml','A',32767);--以a模式会在文件后添加内容,用w会覆盖之前的内容
STAFFINFO :=utl_file.fopen_nchar(STAFFINFO ,temp);
UTL_FILE.FFLUSH(STAFFINFO );
UTL_FILE.FCLOSE(STAFFINFO );
XMLDOM.FREEDOCUMENT(doc);
end loop;
close c_table_info;

--xml tail
STAFFINFO :=utl_file.fopen_nchar('DIR','Test.xml','W',32767);
STAFFINFO :=utl_file.fopen_nchar(STAFFINFO ,'
');
UTL_FILE.FFLUSH(STAFFINFO );
UTL_FILE.FCLOSE(STAFFINFO );


end;


摘自聪明的笨蛋