Создание объекта XML с помощью пакета DBMS_XMLDOM с передачей в виде CLOB
function XMLBuilder return clob is doc DBMS_XMLDOM.DOMDocument; -- объект документа rootElement DBMS_XMLDOM.DOMElement; -- корневой элемент параметров Л/С paramsElement1 DBMS_XMLDOM.DOMElement; -- элемент 1 уровня paramsElement2 DBMS_XMLDOM.DOMElement; -- элемент 2 уровня node DBMS_XMLDOM.DOMNode; -- узел c CLOB; -- курсор для последовательной генерации элементов cursor cur is select rownum from all_users where rownum < 5; x integer; -- хранение переменной из курсора begin doc := dbms_xmldom.createDocument('http://www.w3.org/2001/XMLSchema', null, null); rootElement := DBMS_XMLDOM.createElement(doc, 'ROOT'); -- корневой элемент node := DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(doc), DBMS_XMLDOM.makeNode(rootElement)); DBMS_XMLDOM.setAttribute(rootElement, 'param1', 1); -- атрибуты корн. эл. DBMS_XMLDOM.setAttribute(rootElement, 'param2', 'v'); -- 1 уровень paramsElement1 := DBMS_XMLDOM.createElement(doc, 'LEVEL1'); -- paramsElement1 является дочерним по отношению к rootElement node := DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(rootElement), DBMS_XMLDOM.makeNode(paramsElement1)); -- узлы-элементы 1 уровня open cur; loop fetch cur into x; exit when cur%NOTFOUND; paramsElement2 := DBMS_XMLDOM.createElement(doc, 'UNIT'); helpNode := DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(paramsElement1), DBMS_XMLDOM.makeNode(paramsElement2)); DBMS_XMLDOM.setAttribute(paramsElement1, 'param', x); end loop; close cur; dbms_lob.createtemporary(c, true, dbms_lob.session); c := 'dddd'; -- такРезультат:работать не будет dbms_xmldom.writeToClob(doc, c); return('' || chr(10) || c); end;
<root param1="1" param2="v"> <level1> <unit param="1"/> <unit param="2"/> <unit param="3"/> <unit param="4"/> </level1> </root>
1 комментарий :
-- Исправил ошибки
function XMLBuilder return clob is
doc DBMS_XMLDOM.DOMDocument; -- объект документа
rootElement DBMS_XMLDOM.DOMElement; -- корневой элемент параметров Л/С
paramsElement1 DBMS_XMLDOM.DOMElement; -- элемент 1 уровня
paramsElement2 DBMS_XMLDOM.DOMElement; -- элемент 2 уровня
node DBMS_XMLDOM.DOMNode; -- узел
helpNode DBMS_XMLDOM.DOMNode; -- узел
c CLOB;
-- курсор для последовательной генерации элементов
cursor cur is
select rownum from all_users where rownum < 5;
x integer; -- хранение переменной из курсора
begin
doc := dbms_xmldom.createDocument('http://www.w3.org/2001/XMLSchema',
null,
null);
rootElement := DBMS_XMLDOM.createElement(doc, 'ROOT'); -- корневой элемент
node := DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(doc),
DBMS_XMLDOM.makeNode(rootElement));
DBMS_XMLDOM.setAttribute(rootElement, 'param1', 1); -- атрибуты корн. эл.
DBMS_XMLDOM.setAttribute(rootElement, 'param2', 'v');
-- 1 уровень
paramsElement1 := DBMS_XMLDOM.createElement(doc, 'LEVEL1');
-- paramsElement1 является дочерним по отношению к rootElement
node := DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(rootElement),
DBMS_XMLDOM.makeNode(paramsElement1));
-- узлы-элементы 1 уровня
open cur;
loop
fetch cur
into x;
exit when cur%NOTFOUND;
paramsElement2 := DBMS_XMLDOM.createElement(doc, 'UNIT');
helpNode := DBMS_XMLDOM.appendChild(DBMS_XMLDOM.makeNode(paramsElement1),
DBMS_XMLDOM.makeNode(paramsElement2));
DBMS_XMLDOM.setAttribute(paramsElement2, 'param', x);
end loop;
close cur;
dbms_lob.createtemporary(c, true, dbms_lob.session);
c := 'dddd'; -- так работать не будет
dbms_xmldom.writeToClob(doc, c);
return('' || chr(10) || c);
end;
Отправить комментарий