Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
-SWAN- Member Откуда: Оделся, обулся - и на работу вернулся!) Сообщений: 207 |
Здравствуйте, о Гуру! Подскажите, пжл, как распарсить такой XML? <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', '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) Спасибо заранее за любую помощь! |
6 май 19, 14:04 [21878879] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Почитайте за xml namespace: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) |
6 май 19, 14:15 [21878910] Ответить | Цитировать Сообщить модератору |
-SWAN- Member Откуда: Оделся, обулся - и на работу вернулся!) Сообщений: 207 |
Sergey Syrovatchenko, Спасибо ВАМ Большое! |
6 май 19, 14:19 [21878925] Ответить | Цитировать Сообщить модератору |
uaggster Member Откуда: Сообщений: 972 |
Sergey Syrovatchenko, попутный вопрос, если можно: 1. А как же Ваш ник AlanDenton? Или Вы подражатель? Судя по стилю '(Code/text())[1]', а не вот так: '(Code)[1]', это действительно Вы :-) |
6 май 19, 14:30 [21878960] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
Рад был помочь.
Давно так не смеялся ))) контору быстро попалили мою. Решил перейти в официоз, потому что сегодня-завтра на форуме хочу сделать небольшой анонс своего проекта. |
||||
6 май 19, 14:33 [21878977] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5593 |
да уж года как 4 назад https://habr.com/ru/post/273189/ |
||
6 май 19, 16:16 [21879113] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2269 |
собстно, дело ведь не в "стиле", а в "результате" :) "0" вместо NULL при разборе XML |
||
7 май 19, 04:48 [21879519] Ответить | Цитировать Сообщить модератору |
-SWAN- Member Откуда: Оделся, обулся - и на работу вернулся!) Сообщений: 207 |
Sergey Syrovatchenko, увы,у меня еще заминка((( Подскажите, пожалуйста, как распарсить вот такой вариант XML: <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>89875041789</Phone> <Company>"НовоТайм 58"</Company> <Address>г. Пенза,Саранская 43а</Address> <PostIndex /> <CityCode>105</CityCode> </Address> </AddressBook> <AddressBook> <ID>1135794</ID> <Address> <Person>Николаева Валентина</Person> <Phone>8-968-712-31-12</Phone> <Company>"ПК" Пушкинская площадь"</Company> <Address>улица Шоссейная д. 4Д</Address> <PostIndex /> <CityCode>129</CityCode> </Address> </AddressBook> <AddressBook> <ID>1117808</ID> <Address> <Person>Елена</Person> <Phone>+7 964 508 27 37, +7 495 775 07 28</Phone> <Company>"Свотч Групп"</Company> <Address>Тверская д.4 бутик Tissot . С 10 до 22.</Address> <PostIndex /> <CityCode>129</CityCode> </Address> </AddressBook> </dict_ConsigneesResult> </dict_ConsigneesResponse> </soap:Body> </soap:Envelope> пробовал сделать так, ID выводится, но вот как добраться до Person? 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); Спасибо заранее за советы! |
7 май 19, 15:23 [21880062] Ответить | Цитировать Сообщить модератору |
Sergey Syrovatchenko Member Откуда: Сообщений: 169 |
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) |
7 май 19, 15:28 [21880073] Ответить | Цитировать Сообщить модератору |
-SWAN- Member Откуда: Оделся, обулся - и на работу вернулся!) Сообщений: 207 |
Sergey Syrovatchenko, Сергей, спасибо Вам за помощь!) |
7 май 19, 15:32 [21880076] Ответить | Цитировать Сообщить модератору |
uaggster Member Откуда: Сообщений: 972 |
Я так понял, это для того, чтобы уменьшить количество вызовов функции xml-парсера. Типа вбитый рефлекс. :-) |
||||
7 май 19, 19:32 [21880336] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |