Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Как создать XML? C нуля!


Автор: VIAcom 1.8.2005, 10:34
Не могу создать XML документ. Прочиталь и обрабтать - нормально, и примеры есть, а вот как с нуля самому через DOM документ создать - ??? одни вопросы.


Автор: LSD 2.8.2005, 15:43
Код
declare 
  doc dbms_xmldom.DOMDocument;
  root_element dbms_xmldom.DOMElement;
  root_node dbms_xmldom.DOMNode;
  doc_node dbms_xmldom.DOMNode;
  c Clob;
begin
  doc := dbms_xmldom.createDocument('http://www.w3.org/2001/XMLSchema', null, null);
  dbms_xmldom.setVersion(doc, '1.0');
  root_element := dbms_xmldom.createElement(doc, 'RootNode');
  root_node := dbms_xmldom.makeNode(root_element);
  doc_node := dbms_xmldom.makeNode(doc);
  doc_node := dbms_xmldom.appendChild(doc_node, root_node);

  dbms_lob.createtemporary(c, true, dbms_lob.session);
  dbms_xmldom.writeToClob(doc, c);
  insert into clob_tbl (data) values (c);
end;

создаст такой вот XML:
Код
<?xml version="1.0"?>
<RootNode/>

Автор: VIAcom 3.8.2005, 10:51
Спасибо!

Автор: VIAcom 4.8.2005, 14:05
Все хорошо, но значения ноды я установить все равно не могу, и еще у меня нет
dbmx_xmldom.CreateDocument('....',null,null); а есть только
domxml.NewDocument;

что то я совершенно не просек, какая разница м/у Document/Element/Node если они все так легко друг в друга конвертятся?

Это уже так до кучи, в принципе я уже задачку решил, но несколько по другому, а хотелось бы целиком через DOM! Но тут все так замуторено, прочитал доки по ДОМ, и примеры, так там совершенно не освещен вопрос создания нового документа, только работа с уже имеющимися.

Очень мало примеров с записью и созданием XML, быду признателен за любые ссылки по этой теме.

Автор: LSD 10.8.2005, 14:24
Цитата(VIAcom @ 4.8.2005, 15:05)
еще у меня нет
dbmx_xmldom.CreateDocument('....',null,null); а есть только
domxml.NewDocument;

Какая версия Oracle?

Цитата(VIAcom @ 4.8.2005, 15:05)
значения ноды я установить все равно не могу

Это делается так:
Код
declare 
  doc dbms_xmldom.DOMDocument;
  root_element dbms_xmldom.DOMElement;
  root_node dbms_xmldom.DOMNode;
  node dbms_xmldom.DOMNode;
  data_node dbms_xmldom.DOMText;
  c Clob;
begin
  doc := dbms_xmldom.createDocument('http://www.w3.org/2001/XMLSchema', null, null);
  dbms_xmldom.setVersion(doc, '1.0');
  root_element := dbms_xmldom.createElement(doc, 'RootNode');
  root_node := dbms_xmldom.makeNode(root_element);
  node := dbms_xmldom.makeNode(doc);
  node := dbms_xmldom.appendChild(node, root_node);
  
  data_node := dbms_xmldom.createTextNode(doc, 'XML - Extensible Markup Language');
  node := dbms_xmldom.makeNode(data_node);
  node := dbms_xmldom.appendChild(root_node, node);

  dbms_lob.createtemporary(c, true, dbms_lob.session);
  dbms_xmldom.writeToClob(doc, c);
  insert into clob_tbl (data) values (c);
end;

в результате получим
Код
<?xml version="1.0"?>
<RootNode>XML - Extensible Markup Language</RootNode>


Цитата(VIAcom @ 4.8.2005, 15:05)
что то я совершенно не просек, какая разница м/у Document/Element/Node если они все так легко друг в друга конвертятся?

Document, Element, TextNode и т.д. унаследованны от Node, поэтому они и конвертятся в него, просто для типов PL/SQL нет наследования вот и приходится конвертировать явно. Это все описывается в http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html.

Цитата(VIAcom @ 4.8.2005, 15:05)
Очень мало примеров с записью и созданием XML, быду признателен за любые ссылки по этой теме.

К сожалению не встречал.

Автор: Paradox 28.10.2005, 07:54
А не могли бы для ламеров выложить описание clob_tbl smile
и еще как можно полученный документ сохранить в файл ?

Автор: Paradox 28.10.2005, 10:40
а как добавить атрибут и установить его значение ?

Автор: LSD 30.10.2005, 18:39
Цитата(Paradox @ 28.10.2005, 08:54)
А не могли бы для ламеров выложить описание clob_tbl

Да там вообщем то ничего особого, у меня было 2 столбца: первичный ключ и столбец с clob
Код
-- Create table
create table CLOB_TBL
(
  ID RAW(16) default sys_guid() not null,
  DATA CLOB
);
-- Create/Recreate primary, unique and foreign key constraints 
alter table CLOB_TBL add constraint CLOB_TBL_PK primary key (ID);


Цитата(Paradox @ 28.10.2005, 08:54)
и еще как можно полученный документ сохранить в файл ?

Файл где, на клиенте или на сервере?

Цитата(Paradox @ 28.10.2005, 11:40)
а как добавить атрибут и установить его значение ?

С помощью dbms_xmldom.setAttribute():
Код
declare    
  doc                 dbms_xmldom.DOMDocument;    
  root_element        dbms_xmldom.DOMElement;    
  root_node           dbms_xmldom.DOMNode;    
  node                dbms_xmldom.DOMNode;    
  data_node           dbms_xmldom.DOMText;    
  c Clob;    
begin    
  doc := dbms_xmldom.createDocument('http://www.w3.org/2001/XMLSchema', null, null);    
  dbms_xmldom.setVersion(doc, '1.0');    
  root_element := dbms_xmldom.createElement(doc, 'RootNode');    
  dbms_xmldom.setAttribute(root_element, 'SomeAttribute', 'SomeAttributeValue');
  root_node := dbms_xmldom.makeNode(root_element);    
  node := dbms_xmldom.makeNode(doc);    
  node := dbms_xmldom.appendChild(node, root_node);    
  
    
  data_node := dbms_xmldom.createTextNode(doc, 'XML - Extensible Markup Language');    
  node := dbms_xmldom.makeNode(data_node);    
  node := dbms_xmldom.appendChild(root_node, node);    
  
  
  dbms_lob.createtemporary(c, true, dbms_lob.session);    
  dbms_xmldom.writeToClob(doc, c);    
  insert into clob_tbl (data) values (c);    
end;

Получим:
Код
<?xml version="1.0"?>
<RootNode SomeAttribute="SomeAttributeValue">XML - Extensible Markup Language</RootNode>

Автор: Paradox 31.10.2005, 08:27
LSD спасибо !!!

Автор: Paradox 31.10.2005, 12:45
Цитата
Файл где, на клиенте или на сервере?
файл на сервере
как сохранить пока что не понял

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)