Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Экранирование символов в xml в PL/SQL / 7 сообщений из 7, страница 1 из 1
29.12.2016, 12:07
    #39377506
Рукикрюки
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование символов в xml в PL/SQL
Вариант 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
29.12.2016, 12:09
    #39377508
Рукикрюки
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование символов в xml в PL/SQL
Походу здесь тоже экранирование сработало при вставке кода в пост )
...
Рейтинг: 0 / 0
29.12.2016, 12:25
    #39377525
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование символов в xml в PL/SQL
RTFM dbms_xmlgen.convert
...
Рейтинг: 0 / 0
29.12.2016, 12:46
    #39377558
Рукикрюки
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование символов в xml в PL/SQL
Elic, спасибо, пригодится.
Но он ест только xml на входе?
Например
Код: plsql
1.
dbms_output.put_line(dbms_xmlgen.convert('12312 '' " > <', dbms_xmlgen.ENTITY_DECODE));


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


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