Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_xmldom.removeChild меняет encode в xmltype / 6 сообщений из 6, страница 1 из 1
04.06.2008, 14:50
    #35354223
Lut_Anny
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_xmldom.removeChild меняет encode в xmltype
Вопрос: почему при выполнении функи
dbms_xmldom.removeChild над док-том, созданным на xmltype
меняется значение кодировки
с
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
на
<?xml version="1.0" encoding="WINDOWS-1251" standalone="no"?>

Код: plaintext
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.
29.
30.
31.
32.
declare 
     l_schem  xmltype;
     l_clob     clob;
     l_doc     dbms_xmldom.DOMDocument;
     l_nd       dbms_xmldom.DOMNode;
     l_elem    dbms_xmldom.DOMElement;
begin

     l_schem := xmltype(
                                  '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
                                  <Heder>
                                     <Message>A</Message>
                                  </Header>
                                 <Body>
                                    <Message>B</Message>
                                 </Body>'
                              );

     l_doc   :=  dbms_xmldom.newdomdocument(l_schem);                
     l_nd     :=  dbms_xmldom.item(dbms_xmldom.getelementsbytagname(l_doc, 'Body'),  0 );
     l_elem  :=  dbms_xmldom.getDocumentElement(l_doc ); 

     l_clob   := l_schem.getClobVal();

     /* сдесь   l_clob  = '<?xml version="1.0" encoding="UTF-8" standalone="no"?> ..... '  */

      l_nd        :=  dbms_xmldom.removeChild(dbms_xmldom.makeNode(l_elem), l_nd) ;
      l_clob   := l_schem.getClobVal();

     /*  после   l_clob  = '<?xml version="1.0" encoding="WINDOWS-1251" standalone="no"?> ..... '  */

end;     


Если установить кодировку вручную
Код: plaintext
1.
2.
   
    dbms_xmldom.setCharset(l_doc, 'UTF8');

не помогает...

Если документ создавать на основании клоба а не xmltype, то сразу после инициализации переменной док-та - кодировка меняется так же...


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
declare 
     l_schem  clob;
     l_clob     clob;
     l_doc     dbms_xmldom.DOMDocument;
     l_nd       dbms_xmldom.DOMNode;
     l_elem    dbms_xmldom.DOMElement;
begin

     l_schem := '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
                     <Heder>
                           <Message>A</Message>
                     </Header>
                     <Body>
                           <Message>B</Message>
                     </Body>';

     l_doc   :=  dbms_xmldom.newdomdocument(l_schem);                
     dbms_lob.createtemporary(l_clob, true);
     dbms_xmldom.writeToClob(l_doc, l_clob);

   /*  l_clob  = '<?xml version="1.0" encoding="WINDOWS-1251" standalone="no"?> ..... '   */
end;     

...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.09.2009, 20:43
    #36177787
LykovAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_xmldom.removeChild меняет encode в xmltype
А как решили проблему?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
24.02.2014, 19:39
    #38570873
karlov69
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_xmldom.removeChild меняет encode в xmltype
Та же проблема.

Заголовок XML - <?xml version="1.0" encoding="WINDOWS-1251"?>.
После выполнения deletexml меняется на <?xml version="1.0" encoding="CP866"?>.

CP866 - кодировка БД.

Можно-ли как-то побороть?
...
Рейтинг: 0 / 0
25.02.2014, 16:14
    #38571843
karlov69
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_xmldom.removeChild меняет encode в xmltype
Когда задашь вопрос, ответ быстро находишь.

SELECT UPDATEXML(XMLTYPE('<?xml version="1.0" encoding="WINDOWS-1251"?>
<Root Quan="2" Sum="42179"/>'), '/Root/@Sum', '22222', '/Root/@Quan', '1') .getblobval(nls_charset_id('CL8MSWIN1251')) FROM dual.

Потом преобразование BLOB в CLOB.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
11.05.2017, 11:32
    #39451231
DKbru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_xmldom.removeChild меняет encode в xmltype
авторЕсли установить кодировку вручную

dbms_xmldom.setCharset(l_doc, 'UTF8');

не помогает...
Помогает (11.0.2.0.4)
...
Рейтинг: 0 / 0
11.05.2017, 11:55
    #39451253
DKbru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_xmldom.removeChild меняет encode в xmltype
Пардон, всё таки не помогает (у меня просто кодировка тестовой базы совпала), а жаль.
docs.oracle.comWRITETOCLOB Procedures
Writes XML node to specified CLOB using the database character set
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_xmldom.removeChild меняет encode в xmltype / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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