Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Распарсить XML / 11 сообщений из 11, страница 1 из 1
06.05.2019, 14:04
    #39810202
-SWAN-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распарсить XML
Здравствуйте, о Гуру!
Подскажите, пжл, как распарсить такой 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
06.05.2019, 14:15
    #39810211
Распарсить XML
Почитайте за 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
06.05.2019, 14:19
    #39810218
-SWAN-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распарсить XML
Sergey Syrovatchenko,
Спасибо ВАМ Большое!
...
Рейтинг: 0 / 0
06.05.2019, 14:30
    #39810224
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распарсить XML
Sergey Syrovatchenko, попутный вопрос, если можно:
1. А как же Ваш ник AlanDenton ? Или Вы подражатель?
Судя по стилю '(Code/text())[1]', а не вот так: '(Code)[1]', это действительно Вы :-)
...
Рейтинг: 0 / 0
06.05.2019, 14:33
    #39810228
Распарсить XML
-SWAN-Спасибо
Рад был помочь.

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

да уж года как 4 назад
https://habr.com/ru/post/273189/
...
Рейтинг: 0 / 0
07.05.2019, 04:48
    #39810484
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распарсить XML
uaggsterСудя по стилю '(Code/text())[1]', а не вот так: '(Code)[1]', это действительно Вы :-)
собстно, дело ведь не в "стиле", а в "результате" :)
"0" вместо NULL при разборе XML
...
Рейтинг: 0 / 0
07.05.2019, 15:23
    #39810725
-SWAN-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распарсить XML
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
07.05.2019, 15:28
    #39810733
Распарсить XML
Код: 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
07.05.2019, 15:32
    #39810736
-SWAN-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Распарсить XML
Sergey Syrovatchenko,

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


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