powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разбор XML
3 сообщений из 3, страница 1 из 1
Разбор XML
    #39940214
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Подскажите, пожалуйста, как разобрать простой XML
В таком виде после некоторых упрощений всё в порядке
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT ((xpath('idList/text()', x))[1])::varchar(20)::integer AS idList
FROM (
SELECT 
     unnest(xpath('//Envelope/Body/GetDNListResponse/DNListItem', xml)) AS x
      FROM (      
SELECT '<?xml version="1.0" encoding="Windows-1251"?>
   <Envelope>
	<Body>
	   <GetDNListResponse>
		  <DNListItem>
  			<idList>26998489</idList>
	           </DNListItem>
	           <DNListCount>78299</DNListCount>
            </GetDNListResponse>
      </Body>
</Envelope>'::xml as xml) xxx
) yyy;



А вот исходный XML не разбирается
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="Windows-1251"?>
   <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope">
	<s:Body>
	  <GetDNListResponse xmlns="http://NGate.org/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
	     <DNListItem>
		  <idList>26998489</idList>
             </DNListItem>
             <DNListCount>78299</DNListCount>
</GetDNListResponse>
</s:Body>
</s:Envelope>



Как бы записать строчку в xpath, чтобы она понимала пространства имён?
...
Рейтинг: 0 / 0
Разбор XML
    #39940263
ArkadyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так тоже не получается
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT ((xpath('idList/text()', x))[1])::varchar(20)::integer AS idList
FROM (
SELECT 
     unnest(xpath('//s:Envelope/s:Body/GetDNListResponse/DNListItem', xml, ARRAY[ARRAY['s', 'http://schemas.xmlsoap.org/soap/envelope']])) AS x
      FROM (      
SELECT '<?xml version="1.0" encoding="Windows-1251"?>
   <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope">
	<s:Body>
		<GetDNListResponse xmlns="http://NGate.org/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
 			<DNListItem>
	         		<idList>26998489</idList>
                        </DNListItem>
			<DNListCount>78299</DNListCount>
                </GetDNListResponse>
         </s:Body>
</s:Envelope>'::xml as xml) x
) yyy;
...
Рейтинг: 0 / 0
Разбор XML
    #39940786
Jackvoron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
SELECT
	(
		(
			xpath(
				'myns:idList/text()'
				,raw_xml
				,ARRAY[
					 ARRAY['myns', 'http://NGate.org/']
				]
				
			)
		)[1]
	)::varchar(20)::integer AS idList
FROM
	(	
		SELECT 
			unnest(
				xpath(
					'//s:Envelope/s:Body/myns:GetDNListResponse/myns:DNListItem'
					,raw_xml
					,ARRAY[
						   ARRAY['s', 'http://schemas.xmlsoap.org/soap/envelope']
						--,ARRAY['i', 'http://www.w3.org/2001/XMLSchema-instance']
						--регистрируем свое пространтво имен так как имеем вот это - GetDNListResponse xmlns="http://NGate.org/"
						 ,ARRAY['myns', 'http://NGate.org/']
					]
				)
			) AS raw_xml

		FROM 
			(      
				SELECT 
					$_$<?xml version="1.0" encoding="Windows-1251"?>
					<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope">
						<s:Body>
							<GetDNListResponse xmlns="http://NGate.org/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
								<DNListItem>
									<idList>26998489</idList>
								</DNListItem>
								<DNListCount>78299</DNListCount>
							</GetDNListResponse>
						</s:Body>
					</s:Envelope>
					$_$::xml as raw_xml
			) AS xxx
	) AS raw_data



В данном XML документе присутствует пространство имен по умолчанию xmlns=" http://NGate.org/" , мы его должны определить
и использовать в xpath выражении

Вот тут написано примерно как https://docs.microsoft.com/ru-ru/dotnet/standard/data/xml/xpath-queries-and-namespaces
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разбор XML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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