Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 XML attribute. Сохранить переводы строк.  [new]
-2-
Member

Откуда:
Сообщений: 15330
Есть xml-файлы цать мегабайт. Их нужно разгребать по табличкам по мере появления на файловой системе.
Проблема в том, что данные кодируются атрибутами и часть из них содержат значащие переводы строк, которые при парсе заменяются на пробел в соответствии с рекомендациями w3c. Изготовитель файлов пока отказывается следовать этим рекомендациям и записывать переводы строк как .

Как вытащить значение атрибута с сохранением переводов строк встроенными средствами оракла 11.2.0.3?
set define off
set serveroutput on 
declare
   xparser   DBMS_XMLPARSER.parser;
   xdoc      DBMS_XMLDOM.DOMDocument;
   xnode     DBMS_XMLDOM.DOMNode;
   xnodea    DBMS_XMLDOM.DOMNode;   
   xelem     dbms_xmldom.DOMElement;
   xattr     dbms_xmldom.DOMAttr;
begin
   xparser   := dbms_xmlparser.newParser();
   dbms_xmlparser.setPreserveWhitespace(xparser, true);
   --dbms_xmlparser.parse(xParser, filename);
   dbms_xmlparser.parseBuffer(xParser, '<node
attr="First line,
   &lt;Second line&gt;;
Third line.
">
...
</node>'); 
   xdoc       := dbms_xmlparser.getDocument(xParser);
   xnode      := dbms_xmldom.makeNode(xdoc);
   xnodea     := dbms_xmldom.getFirstChild(xnode); 
   xelem      := dbms_xmldom.makeElement(xnodea);
   dbms_output.put_line('attr=['||dbms_xmldom.getAttribute(xelem, 'attr')||']');
   dbms_xmldom.freeElement(xelem);
   dbms_xmldom.freeNode(xnodea);
   dbms_xmldom.freeNode(xnode);
   dbms_xmldom.freeDocument(xdoc);
   dbms_xmlparser.freeParser(xparser);
end;
/

anonymous block completed
attr=[First line,    <Second line>; Third line. ]
sql
select xmltype('<node
attr="First line,
   &lt;Second line&gt;;
Third line.
">
...
</node>') x1 from dual;

X1                                                                             
--------------------------------------------------------------------------------
<node                                                                            
attr="First line,                                                                
   &lt;Second line&gt;;                                                          
Third line.                                                                      
">                                                                               
...                                                                              
</node>                                                                          


select xmltype('<node
attr="First line,
   &lt;Second line&gt;;
Third line.
">
...
</node>').extract('.') x2 from dual;

X2                                                                             
--------------------------------------------------------------------------------
<node attr="First line,    &lt;Second line&gt;; Third line. ">                   
...                                                                              
</node>                                                                          
5 июн 13, 12:44    [14393821]     Ответить | Цитировать Сообщить модератору
 Re: XML attribute. Сохранить переводы строк.  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
-2-,

на крайняк- до парса заменить переводы на печатную грязь (\n /n тильду матильду)
после парса (имхо) можно так и оставить - пусть любуются, пока маразмом в ум не придут
5 июн 13, 13:58    [14394566]     Ответить | Цитировать Сообщить модератору
 Re: XML attribute. Сохранить переводы строк.  [new]
dba123
Member

Откуда:
Сообщений: 1054
-2-,

а если грузить loader-ом,
в его управляющем файле можно что подкрутить?
5 июн 13, 14:41    [14394933]     Ответить | Цитировать Сообщить модератору
 Re: XML attribute. Сохранить переводы строк.  [new]
-2-
Member

Откуда:
Сообщений: 15330
orawish
до парса заменить переводы на печатную грязь (\n /n тильду матильду)
для этого сначала нужно распарсить, что есть значение атрибута. парсить как текст не спортивно, привлекать внешние инструменты - много времени на поиск кроссплатформенных решений, усложнение исталляций системы.
остается экспериментировать с хранимками на java.
dba123
а если грузить loader-ом
loader может загрузить файл в поле xmltype, но мне нужны разобранные данные из этого файла.
5 июн 13, 14:57    [14395050]     Ответить | Цитировать Сообщить модератору
 Re: XML attribute. Сохранить переводы строк.  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
-2-
orawish
до парса заменить переводы на печатную грязь (\n /n тильду матильду)
для этого сначала нужно распарсить, что есть значение атрибута.

Для зачем?
5 июн 13, 16:17    [14395630]     Ответить | Цитировать Сообщить модератору
 Re: XML attribute. Сохранить переводы строк.  [new]
-2-
Member

Откуда:
Сообщений: 15330
andrey_anonymous
-2-
пропущено...
для этого сначала нужно распарсить, что есть значение атрибута.

Для зачем?
Для затем, чтобы полученный текст остался пригодным для разбора средствами xml.
5 июн 13, 16:45    [14395882]     Ответить | Цитировать Сообщить модератору
 Re: XML attribute. Сохранить переводы строк.  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
-2-
andrey_anonymous
пропущено...
Для зачем?
Для затем, чтобы полученный текст остался пригодным для разбора средствами xml.

Пример?
5 июн 13, 16:52    [14395946]     Ответить | Цитировать Сообщить модератору
 Re: XML attribute. Сохранить переводы строк.  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
-2-,

Как бы whitespace-ы в XML всегда считаются незначимыми.
Если тебе надо, чтобы они были значимыми и вообще текст воспринимался в оригинальном виде -- используй CDATA.
5 июн 13, 16:59    [14395977]     Ответить | Цитировать Сообщить модератору
 Re: XML attribute. Сохранить переводы строк.  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
MasterZiv
используй CDATA.

-2-
в соответствии с рекомендациями w3c. Изготовитель файлов пока отказывается следовать этим рекомендациям и записывать переводы строк как
.
5 июн 13, 17:02    [14395994]     Ответить | Цитировать Сообщить модератору
 Re: XML attribute. Сохранить переводы строк.  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
MasterZiv,

Сори, не понял, что переводы строк в АТРИБУТАХ.
Увы, тогда ничего не сделать, переводы строк в атрибутах -- это моветон.
Надо кодировать текстовыми нодами такой текст (в виде содержимого элементов).
И там уже CDATA.
5 июн 13, 17:02    [14395996]     Ответить | Цитировать Сообщить модератору
 Re: XML attribute. Сохранить переводы строк.  [new]
-2-
Member

Откуда:
Сообщений: 15330
andrey_anonymous
-2-
пропущено...
Для затем, чтобы полученный текст остался пригодным для разбора средствами xml.

Пример?
Пример в моем первом сообщении.

Впрочем. "Изготовитель" рассмотрел аргументы и обещает внести изменения на своей стороне. Так что остался только спортивный интерес.
5 июн 13, 17:17    [14396090]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить