Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбор XML на пути и значения / 8 сообщений из 8, страница 1 из 1
20.04.2018, 08:04
    #39633500
admontes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML на пути и значения
Всем добрый день.

Предположим есть XML (взято с потолка)
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<heads>
	<head>
		<fio>Иванов Иван Иванович</fio>
		<innfl>650102111111</innfl>
		<position>Ликвидатор</position>
		<date>2017-09-19</date>
		<firstDate>2009-06-29</firstDate>
	</head>

	<head>
		<fio>Санжаревский Сергей Игоревич</fio>
		<innfl>650102442906</innfl>
		<position>Зам.Ликвидатора</position>
		<date>2017-09-19</date>
		<firstDate>2009-06-29</firstDate>
		<phones>
			<phone>111111</phone>
			<phone>222222</phone>
		</phones>
	</head>
</heads>



Есть ли возможность привести в реляционную модель из двух колонок: путь, значение.
Ну, например, из примера выше будет что-то:
/heads/head/fio;Иванов Иван Иванович
/heads/head/innfl;650102111111
.........
/heads/head/phones/phone;111111
/heads/head/phones/phone;222222

Причем структура xml заранее неизвестно. Нужно рекурсивно найти все дочерние элементы и вывести их значения с наименованием пути.
Подскажите, можно ли это сделать с помощью Xquery ?
...
Рейтинг: 0 / 0
20.04.2018, 09:04
    #39633525
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML на пути и значения
admontesПодскажите, можно ли это сделать с помощью Xquery ?

а чем dbms_xmldom не угодил ?
...
Рейтинг: 0 / 0
20.04.2018, 09:07
    #39633528
admontes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML на пути и значения
123йй,
Не все данные нужны и хотелось бы их предварительно отфильтровать.
...
Рейтинг: 0 / 0
20.04.2018, 09:19
    #39633533
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML на пути и значения
admontes,

как ты отфильтруешь то, что еще не распарсено и

авторПричем структура xml заранее неизвестно.?
...
Рейтинг: 0 / 0
20.04.2018, 09:22
    #39633536
admontes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML на пути и значения
123йй,
Мне нужны только определенные ветки изменений, которые возвращает xmldiff
...
Рейтинг: 0 / 0
20.04.2018, 09:26
    #39633539
admontes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML на пути и значения
Можно конечно так:
Код: plsql
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.
select * from 
xmltable( '//*[text()]'
          passing 
          xmltype('
                <heads>
                  <head>
                    <fio>Иванов Иван Иванович</fio>
                    <innfl>650102111111</innfl>
                    <position>Ликвидатор</position>
                    <date>2017-09-19</date>
                    <firstDate>2009-06-29</firstDate>
                  </head>

                  <head>
                    <fio>Санжаревский Сергей Игоревич</fio>
                    <innfl>650102442906</innfl>
                    <position>Зам.Ликвидатора</position>
                    <date>2017-09-19</date>
                    <firstDate>2009-06-29</firstDate>
                    <phones>
                      <phone>111111</phone>
                      <phone>222222</phone>
                    </phones>
                  </head>
                </heads>           
          ')  
           
           COLUMNS
                         p  varchar2(200) path 'local-name()',
                         v  varchar2(200) path 'text()'
--                         ,v  varchar2(200) path 'v');
)


Но нет полных путей
...
Рейтинг: 0 / 0
20.04.2018, 09:35
    #39633548
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML на пути и значения
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select *
from xmltable('//*[empty(./*)]' -- не выведет значения с xml на том же уровне
passing хмл
  columns "." varchar2(100),
  p varchar2(1000) path 'declare function local:path($x) {
   for $p in $x/..
   let $pn := local:path($p)
   return concat($pn,"/",name($x))
};local:path(.)'
);
...
Рейтинг: 0 / 0
20.04.2018, 09:37
    #39633552
admontes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML на пути и значения
-2-,

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


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