powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Создание xml запросом (newContextFromHierarchy, xmlelement)
1 сообщений из 1, страница 1 из 1
Создание xml запросом (newContextFromHierarchy, xmlelement)
    #39265749
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Мне нужно запросом построить xml файл, на основе данных представленных специальным образом в таблице БД.
Xml файл должен поддерживать вложенность тэгов, определяемую иерархией и подчинённостью в полях id_par и id,
а также атррибуты, которые уже в собранном виде хранятся в поле attr_value.

Пример данных:
Код: plsql
1.
2.
3.
4.
SELECT 1 ord,   'aaa' AS tag_name,   'aaa' tag_value,    NULL AS id,     NULL AS id_par,     NULL as attr_value                  FROM DUAL UNION ALL
SELECT 2 ord,   'bbb' AS tag_name,   NULL tag_value,     1 AS id,        NULL AS id_par,     NULL as attr_value                  FROM DUAL UNION ALL
SELECT 3 ord,   'ccc' AS tag_name,   'ccc' tag_value,    2 AS id,        1 AS id_par,        'atr1="1" atr2="2"' as attr_value   FROM DUAL UNION ALL
SELECT 4 ord,   'ddd' AS tag_name,   'ddd' tag_value,    3 AS id,        1 AS id_par,         NULL as attr_value                 FROM DUAL



Из этого примера должен получится следующий XML:
Код: xml
1.
2.
3.
4.
5.
<aaa>aaa</aaa>
<bbb>
 <ccc atr1="1" atr2="2">ссс</ccc>
 <ddd>ddd</ddd>
</bbb>



Поизучав примеры, написал следующий запрос.
Его проблема в правильном добавлении аттрибутов к тэгу.

Код: sql
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.
SELECT DBMS_XMLGEN.getxmltype(DBMS_XMLGEN.newContextFromHierarchy('
WITH test AS 
(
SELECT 1 ord,   ''aaa'' AS tag_name,   ''aaa'' tag_value,    NULL AS id,     NULL AS id_par,     NULL as attr_value                  FROM DUAL UNION ALL
SELECT 2 ord,   ''bbb'' AS tag_name,   NULL tag_value,     1 AS id,        NULL AS id_par,     NULL as attr_value                  FROM DUAL UNION ALL
SELECT 3 ord,   ''ccc'' AS tag_name,   ''ccc'' tag_value,    2 AS id,        1 AS id_par,        ''atr1="1" atr2="2"'' as attr_value   FROM DUAL UNION ALL
SELECT 4 ord,   ''ddd'' AS tag_name,   ''ddd'' tag_value,    3 AS id,        1 AS id_par,         NULL as attr_value                 FROM DUAL
)
SELECT lvl,
       XMLELEMENT ( evalname tag_name,                                    
                    XMLAttributes(attr_value AS "attr"),
                    tag_value) XML
  FROM
(
  SELECT LEVEL AS lvl,
         tag_name,
         tag_value,
         attr_value,
         ord               
    FROM test        
   START WITH id_par is null
 CONNECT BY PRIOR id = id_par
)
ORDER BY ord
')) AS xml FROM dual



Он возвращает следующее значение:
Код: html
1.
<ccc attr="atr1=&quot;1&quot; atr2=&quot;2&quot;">ccc</ccc> 


вместо
Код: html
1.
<ccc atr1="1" atr2="2"></ccc>



Подскажите пожалуйста, как лучше подправить мой запрос для исправления ошибки или как лучше его переписать?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Создание xml запросом (newContextFromHierarchy, xmlelement)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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