powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Распарсить XML
11 сообщений из 11, страница 1 из 1
Распарсить XML
    #39810202
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, о Гуру!
Подскажите, пжл, как распарсить такой XML?

Код: xml
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.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <dict_CitiesResponse xmlns="http://ltl-ws.major-express.ru/edclients/">
      <dict_CitiesResult>
        <EDCity>
          <Code>73</Code>
          <Name>Архангельск</Name>
          <EngName>ARKHANGELSK</EngName>
          <IsShipper>true</IsShipper>
        </EDCity>
        <EDCity>
          <Code>74</Code>
          <Name>Астрахань</Name>
          <EngName>ASTRAKHAN</EngName>
          <IsShipper>true</IsShipper>
        </EDCity>
        <EDCity>
          <Code>75</Code>
          <Name>Барнаул(Алтайский край)</Name>
          <EngName>BARNAUL</EngName>
          <IsShipper>true</IsShipper>
        </EDCity>
        <EDCity>
          <Code>76</Code>
          <Name>Белгород</Name>
          <EngName>BELGOROD</EngName>
          <IsShipper>true</IsShipper>
        </EDCity>
      </dict_CitiesResult>
    </dict_CitiesResponse>
  </soap:Body>
</soap:Envelope>




пытаюсь сделать так, но ничего не выводится(:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
 select
 b.n.value('@Code', 'int') as CodeCity
 --b.n.value('@Name', 'nvarchar(200)') as NameCity,
 --b.n.value('@EngName', 'nvarchar(200)') as EngName, 
 --b.n.value('@IsShipper', 'varchar(10)') as IsShipper
from
 [dbo].[tblMAJORtmpXML] a cross apply
 a.y.nodes('//EDCity') b(n);



В таблице tblMAJORtmpXML столбец y (тип xml)
Спасибо заранее за любую помощь!
...
Рейтинг: 0 / 0
Распарсить XML
    #39810211
Почитайте за xml namespace:

Код: 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.
DECLARE @xml XML = N'
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <dict_CitiesResponse xmlns="http://ltl-ws.major-express.ru/edclients/">
      <dict_CitiesResult>
        <EDCity>
          <Code>73</Code>
          <Name>Архангельск</Name>
          <EngName>ARKHANGELSK</EngName>
          <IsShipper>true</IsShipper>
        </EDCity>
        <EDCity>
          <Code>74</Code>
          <Name>Астрахань</Name>
          <EngName>ASTRAKHAN</EngName>
          <IsShipper>true</IsShipper>
        </EDCity>
        <EDCity>
          <Code>75</Code>
          <Name>Барнаул(Алтайский край)</Name>
          <EngName>BARNAUL</EngName>
          <IsShipper>true</IsShipper>
        </EDCity>
        <EDCity>
          <Code>76</Code>
          <Name>Белгород</Name>
          <EngName>BELGOROD</EngName>
          <IsShipper>true</IsShipper>
        </EDCity>
      </dict_CitiesResult>
    </dict_CitiesResponse>
  </soap:Body>
</soap:Envelope>'

SELECT b.n.value('(*:Code/text())[1]', 'INT') AS CodeCity
     , b.n.value('(*:Name/text())[1]', 'NVARCHAR(200)') AS NameCity
     , b.n.value('(*:EngName/text())[1]', 'NVARCHAR(200)') AS EngName
     , b.n.value('(*:IsShipper/text())[1]', 'VARCHAR(10)') AS IsShipper
FROM @xml.nodes('//*:EDCity') b(n)

;WITH XMLNAMESPACES(DEFAULT 'http://ltl-ws.major-express.ru/edclients/')
SELECT b.n.value('(Code/text())[1]', 'INT') AS CodeCity
     , b.n.value('(Name/text())[1]', 'NVARCHAR(200)') AS NameCity
     , b.n.value('(EngName/text())[1]', 'NVARCHAR(200)') AS EngName
     , b.n.value('(IsShipper/text())[1]', 'VARCHAR(10)') AS IsShipper
FROM @xml.nodes('//EDCity') b(n)
...
Рейтинг: 0 / 0
Распарсить XML
    #39810218
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Syrovatchenko,
Спасибо ВАМ Большое!
...
Рейтинг: 0 / 0
Распарсить XML
    #39810224
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Syrovatchenko, попутный вопрос, если можно:
1. А как же Ваш ник AlanDenton ? Или Вы подражатель?
Судя по стилю '(Code/text())[1]', а не вот так: '(Code)[1]', это действительно Вы :-)
...
Рейтинг: 0 / 0
Распарсить XML
    #39810228
-SWAN-Спасибо
Рад был помочь.

uaggsterА как же Ваш ник AlanDenton? Или Вы подражатель?
Давно так не смеялся ))) контору быстро попалили мою.
Решил перейти в официоз, потому что сегодня-завтра на форуме хочу сделать небольшой анонс своего проекта.
...
Рейтинг: 0 / 0
Распарсить XML
    #39810296
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey SyrovatchenkoДавно так не смеялся ))) контору быстро попалили мою.

да уж года как 4 назад
https://habr.com/ru/post/273189/
...
Рейтинг: 0 / 0
Распарсить XML
    #39810484
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterСудя по стилю '(Code/text())[1]', а не вот так: '(Code)[1]', это действительно Вы :-)
собстно, дело ведь не в "стиле", а в "результате" :)
"0" вместо NULL при разборе XML
...
Рейтинг: 0 / 0
Распарсить XML
    #39810725
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Syrovatchenko,

увы,у меня еще заминка(((
Подскажите, пожалуйста, как распарсить вот такой вариант XML:

Код: xml
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.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <dict_ConsigneesResponse xmlns="http://ltl-ws.major-express.ru/edclients/">
      <dict_ConsigneesResult>
        <AddressBook>
          <ID>1545349</ID>
          <Address>
            <Person>...</Person>
            <Phone>...</Phone>
            <Company>...</Company>
            <Address>...</Address>
            <PostIndex />
            <CityCode>105</CityCode>
          </Address>
        </AddressBook>
        <AddressBook>
          <ID>1135794</ID>
          <Address>
            <Person>...</Person>
            <Phone>...</Phone>
            <Company>...</Company>
            <Address>...</Address>
            <PostIndex />
            <CityCode>129</CityCode>
          </Address>
        </AddressBook>
        <AddressBook>
          <ID>1117808</ID>
          <Address>
            <Person>...</Person>
            <Phone>...</Phone>
            <Company>...</Company>
            <Address>...</Address>
            <PostIndex />
            <CityCode>129</CityCode>
          </Address>
        </AddressBook>
      </dict_ConsigneesResult>
    </dict_ConsigneesResponse>
  </soap:Body>
</soap:Envelope>




пробовал сделать так, ID выводится, но вот как добраться до Person?

Код: sql
1.
2.
3.
4.
5.
6.
 select
 b.n.value('(*:ID/text())[1]', 'INT') AS ID,
 b.n.value('(*:Address/Person/text())[1]', 'nvarchar(200)') AS Person
from
 [dbo].[tblMAJORtmpConsigneesXML] a cross apply
 a.y.nodes('//*:AddressBook') b(n);



Спасибо заранее за советы!
...
Рейтинг: 0 / 0
Распарсить XML
    #39810733
Код: sql
1.
2.
3.
SELECT b.n.value('(*:ID/text())[1]', 'INT') AS ID
     , b.n.value('(*:Address/*:Person/text())[1]', 'NVARCHAR(200)') AS Person
FROM @xml.nodes('//*:AddressBook') b(n)
...
Рейтинг: 0 / 0
Распарсить XML
    #39810736
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Syrovatchenko,

Сергей, спасибо Вам за помощь!)
...
Рейтинг: 0 / 0
Распарсить XML
    #39810901
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
courtuaggsterСудя по стилю '(Code/text())[1]', а не вот так: '(Code)[1]', это действительно Вы :-)
собстно, дело ведь не в "стиле", а в "результате" :)
"0" вместо NULL при разборе XML
Я так понял, это для того, чтобы уменьшить количество вызовов функции xml-парсера. Типа вбитый рефлекс.
:-)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Распарсить XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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