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

Откуда:
Сообщений: 48
Перед составлением XML, нужно чтобы в тексте не было нелегальных XML символов.
Таких как CHR(1)-CHR(8) и многих других.

К удивлению, не обнаружил в документации стандартной функции для этого.
Плохо искал?
Сделать самому не проблема, просто эта задача, как мне кажется, довольно распостраненная и должна (ну просто обязана!) существовать стандартная функция для этого...
28 сен 12, 16:06    [13239687]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли готовая функция для избавления от не-XML символов?  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6718
iluxer,

regexp_replace, translate не подходят?
28 сен 12, 16:38    [13239891]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли готовая функция для избавления от не-XML символов?  [new]
iluxer
Member

Откуда:
Сообщений: 48
сложновато
28 сен 12, 16:50    [13240007]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли готовая функция для избавления от не-XML символов?  [new]
-2-
Member

Откуда:
Сообщений: 15330
iluxer
сложновато
Для xml не существует управляющих символов. Рекомендация, использовать текстовое кодирование типа base64. Что именно ты ожидаешь от "стандартной функции"? Либо кодируй все значение безусловно, либо удаляй ненужные символы по своим правилам.
28 сен 12, 16:57    [13240056]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли готовая функция для избавления от не-XML символов?  [new]
iluxer
Member

Откуда:
Сообщений: 48
Чтобы не было таких ошибок.

SQL> declare
  2     x  xmltype;
  3  begin
  4    x:= XMLTYPE('<test>' ||  CHR(1) || '</test>');
  5  end;
  6  /
declare
*
ошибка в строке 1:
ORA-31011: сбой разбора XML
ORA-19202: Возникла ошибка при обработке XML
LPX-00217: недопустимый символ 1 (U+0001)
Error at line 1
ORA-06512: на  "SYS.XMLTYPE", line 310
ORA-06512: на  line 4
28 сен 12, 17:00    [13240080]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли готовая функция для избавления от не-XML символов?  [new]
-2-
Member

Откуда:
Сообщений: 15330
iluxer
Чтобы не было таких ошибок.
это поведение соответствует спецификации xml. Он не может хранить упрвляющие символы. Повторяю, решение - кодировать любым удобным тебе способом и декодировать потом при чтении. Если эти символы тебе не важны, кодирование сводится к их удалению.
28 сен 12, 17:07    [13240145]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли готовая функция для избавления от не-XML символов?  [new]
iluxer
Member

Откуда:
Сообщений: 48
ok
Ясно.
28 сен 12, 17:10    [13240168]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли готовая функция для избавления от не-XML символов?  [new]
Zloxa
Member

Откуда: СССР ☭
Сообщений: 1033
iluxer, проескейпить управляющие символы XML можно с помощью dbms_xmlgen.convert, но c CHR(1) он не справляется.
SQL> select dbms_xmlgen.convert('<>'||chr(1),0) from dual;
 
DBMS_XMLGEN.CONVERT('<>'||CHR(
--------------------------------------------------------------------------------
&lt;&gt;
 

Двоичные же данные, как уже сказано раньше, наверное лучше представлять в base64
SQL> select utl_encode.base64_encode(utl_raw.cast_to_raw('<>'||chr(1))) from dual;
 
UTL_ENCODE.BASE64_ENCODE(UTL_R
--------------------------------------------------------------------------------
50443442
28 сен 12, 17:13    [13240196]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить