Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вопрос по xml / 4 сообщений из 4, страница 1 из 1
19.09.2017, 09:01
    #39523033
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по xml
Доброго времени суток!
подскажите, пожалуйста, вот строю xml

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
DECLARE                                                                                                                
    doc  DBMS_XMLDOM.DOMDocument;                                                                                        
    xdata  XMLTYPE;  

CURSOR xmlcur IS   
SELECT XMLROOT (XMLELEMENT("Подтв",
                      XMLATTRIBUTES('бла бла бла' as "xmlns"
                                 , gen_guid as "ИдПодтв"
                                 , 'NameFile' as "ИмяФайла"
                                 , to_char(sysdate , 'yyyy-mm-dd hh24:mi:ss')as "ДатаВремяПроверки"),
                XmlElement("РезПроверки", 
                   XMLATTRIBUTES('01' as "КодРезПроверки"
                                  , 'Ok' as "Пояснение")
                           )                            
      ), version '1.0" encoding="windows-1251')
FROM dual ;  
 
BEGIN           
    OPEN xmlcur;   
         LOOP 
           FETCH xmlcur INTO xdata;
           EXIT WHEN xmlcur%NOTFOUND;
           dbms_output.put_line(xdata.getClobVal);
           --doc := DBMS_XMLDOM.NewDOMDocument(xdata); 
           --DBMS_XMLDOM.WRITETOFILE(doc, 'XMLDIR/NameFile.xml');
         END LOOP;
    CLOSE  xmlcur;                    
END; 



Результат

Код: xml
1.
2.
3.
4.
<?xml version="1.0" encoding="windows-1251"?>
<Подтв xmlns="бла бла бла" ИдПодтв="59850C52-0530-0F6C-E053-0100007FA0F3" ИмяФайла="NameFile" ДатаВремяПроверки="2017-09-19 10:51:21">
  <РезПроверки КодРезПроверки="01" Пояснение="Ok"/>
</Подтв>


Вроде все ок

но вот когда сохраняю его

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
DECLARE                                                                                                                
    doc  DBMS_XMLDOM.DOMDocument;                                                                                        
    xdata  XMLTYPE;  

CURSOR xmlcur IS   
SELECT XMLROOT (XMLELEMENT("Подтв",
                      XMLATTRIBUTES('бла бла бла' as "xmlns"
                                 , gen_guid as "ИдПодтв"
                                 , 'NameFile' as "ИмяФайла"
                                 , to_char(sysdate , 'yyyy-mm-dd hh24:mi:ss')as "ДатаВремяПроверки"),
                XmlElement("РезПроверки", 
                   XMLATTRIBUTES('01' as "КодРезПроверки"
                                  , 'Ok' as "Пояснение")
                           )                            
      ), version '1.0" encoding="windows-1251')
FROM dual ;  
 
BEGIN           
    OPEN xmlcur;   
         LOOP 
           FETCH xmlcur INTO xdata;
           EXIT WHEN xmlcur%NOTFOUND;
           --dbms_output.put_line(xdata.getClobVal);
           doc := DBMS_XMLDOM.NewDOMDocument(xdata); 
           DBMS_XMLDOM.WRITETOFILE(doc, 'XMLDIR/NameFile.xml');
         END LOOP;
    CLOSE  xmlcur;                    
END; 



xml' ина создается без version '1.0" encoding="windows-1251' и приходится вручную открывать файл и добавлять строчку
<?xml version="1.0" encoding="windows-1251"?>
почему ?

Код: xml
1.
2.
3.
<Подтв xmlns="бла бла бла" ИдПодтв="59850C52-0530-0F6C-E053-0100007FA0F3" ИмяФайла="NameFile" ДатаВремяПроверки="2017-09-19 10:51:21">
  <РезПроверки КодРезПроверки="01" Пояснение="Ok"/>
</Подтв>
...
Рейтинг: 0 / 0
19.09.2017, 09:12
    #39523039
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по xml
Вроде все, разобрался.
Добавил charset
Код: plsql
1.
DBMS_XMLDOM.WRITETOFILE(doc, 'XMLDIR/filename.xml','windows-1251');


и <?xml version="1.0" encoding="windows-1251"?>
вставился в xml
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
27.02.2020, 09:30
    #39931433
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по xml
Почему вместо '<' и '>' '& lt' и '& gt' ?


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Connected to Oracle Database 11g Release 11.2.0.1.0 
Connected as supermag@//192.168.1.201/DBOFFICE

SQL> 
SQL> declare
  2    doc DBMS_XMLDOM.DOMDocument;
  3    xdata  XMLTYPE;
  4  begin
  5    for xdata in (
  6        select XMLELEMENT("item",
  7                  XMLELEMENT("article", '123') || chr(13) ||XMLELEMENT("name", 'наме')
  8               ) xml
  9          from dual
 10  
 11        ) loop
 12    doc := DBMS_XMLDOM.NewDOMDocument(xdata.xml);
 13    DBMS_XMLDOM.WRITETOFILE(doc, 'TEMP/NameFile.xml', 'windows-1251');
 14  end loop;
 15  end;
 16  /

PL/SQL procedure successfully completed

SQL> host type c:\temp\NameFile.xml;
SQL> -- че-то не сработало



Код: xml
1.
2.
3.
<?xml version="1.0" encoding="WINDOWS-1251"?>
<item>&lt;article&gt;123&lt;/article&gt;
&lt;name&gt;наме&lt;/name&gt;</item>



Потому что || делает строку, а если в строке встречаются служебные символы, они маскируются.
Правильно:

Код: plsql
1.
2.
3.
select XMLELEMENT("item",
                XMLELEMENT("article", '123'), XMLELEMENT("name", 'наме')
             ) xml
...
Рейтинг: 0 / 0
27.02.2020, 10:23
    #39931486
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по xml
dmdmdm
Потому что ||
Не в первоначальную тему, да и способ демонстрации величия проблемы неявных преобразований с привлечением xml и записи в файл излишне витиеватый.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вопрос по xml / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]