powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Экранирование символов в xml в PL/SQL
7 сообщений из 7, страница 1 из 1
Экранирование символов в xml в PL/SQL
    #39377506
Рукикрюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вариант 1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
   CREATE OR REPLACE FUNCTION GET_TEXT_FOR_XML1(P_VALUE VARCHAR2) RETURN VARCHAR2 
   IS
      v_result VARCHAR2(2000);
   BEGIN
      SELECT REGEXP_REPLACE(XMLELEMENT(Q1, P_VALUE).getclobval(), '</*Q1>', '')
        INTO v_result FROM dual;
      RETURN v_result;
   END;


Вариант 2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
   CREATE OR REPLACE FUNCTION GET_TEXT_FOR_XML2(P_VALUE VARCHAR2) RETURN VARCHAR2 DETERMINISTIC
   IS
      v_result VARCHAR2(2000) := P_VALUE;
      v_search_char sys.odcivarchar2list := sys.odcivarchar2list('&', '"', '©', '®', '™', '?', 
                                                                 'Ј', '„', '“', '«', '»', 
                                                                 '>', '<', '&#8805;', '&#8804;', '&#8776;', 
                                                                 '&#8800;', '&#8801;', '§', '&#8734;');
      v_replace_char sys.odcivarchar2list := sys.odcivarchar2list('&',  '"', '©', '®',  '™', '€',
                                                                  '&#163;','„','“','«', '»',
                                                                  '>',   '<',   '&#8805;',   '&#8804;',    '&#8776;',
                                                                  '&#8800;',   '&#8801;','§', '&#8734;');
   BEGIN
      FOR g IN v_search_char.FIRST..v_search_char.LAST
      LOOP
         v_result := REPLACE(v_result, v_search_char(g), v_replace_char(g));
      END LOOP;      
      RETURN v_result;
   END;


Понятно, что второй вариант работает минимум в 5 раз быстрее.
Но может есть вариант лучше, хотя бы лаконичнее?
...
Рейтинг: 0 / 0
Экранирование символов в xml в PL/SQL
    #39377508
Рукикрюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Походу здесь тоже экранирование сработало при вставке кода в пост )
...
Рейтинг: 0 / 0
Экранирование символов в xml в PL/SQL
    #39377525
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTFM dbms_xmlgen.convert
...
Рейтинг: 0 / 0
Экранирование символов в xml в PL/SQL
    #39377558
Рукикрюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic, спасибо, пригодится.
Но он ест только xml на входе?
Например
Код: plsql
1.
dbms_output.put_line(dbms_xmlgen.convert('12312 '' " > <', dbms_xmlgen.ENTITY_DECODE));


Выдает все ту же строку:
12312 ' " > <
...
Рейтинг: 0 / 0
Экранирование символов в xml в PL/SQL
    #39377602
ENTITY_DECODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рукикрюки, потому что надо ENTITY_ENCODE
...
Рейтинг: 0 / 0
Экранирование символов в xml в PL/SQL
    #39377604
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РукикрюкиНоИмечко очень правильное.
...
Рейтинг: 0 / 0
Экранирование символов в xml в PL/SQL
    #39377717
ElicИмечко очень правильное
И не только.
Но все равно спасибо )
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Экранирование символов в xml в PL/SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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