powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_xmldom.removeChild меняет encode в xmltype
6 сообщений из 6, страница 1 из 1
dbms_xmldom.removeChild меняет encode в xmltype
    #35354223
Lut_Anny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос: почему при выполнении функи
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
Период между сообщениями больше года.
dbms_xmldom.removeChild меняет encode в xmltype
    #36177787
LykovAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как решили проблему?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
dbms_xmldom.removeChild меняет encode в xmltype
    #38570873
karlov69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Та же проблема.

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

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

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

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
Период между сообщениями больше года.
dbms_xmldom.removeChild меняет encode в xmltype
    #39451231
DKbru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЕсли установить кодировку вручную

dbms_xmldom.setCharset(l_doc, 'UTF8');

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


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