Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите распарсить xml  [new]
хмхмхм
Guest
Доброго всем утра.
Помогите пожалуйста с парсингом xml файла.
Есть xml такой структуры:

declare @xml xml =
'<Requests xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Name xmlns="http://test.ru/test.xsd">Name</Name>
  <T xmlns="http://test.ru/test.xsd">00000000-0000-0000-0000-000000000000</T>
  <Params xmlns="http://test.ru/test.xsd">
    <Id>99999999-9999-9999-9999-999999999999</Id>
  </Params>
</Requests>'


Когда я раскладываю xml по тегу Request все хорошо:
;with xmlnamespaces ('http://test.ru/test.xsd' as ns1)
select
	 n.s.value('ns1:Name[1]', 'nvarchar(100)')
	, n.s.value('ns1:T[1]', 'uniqueidentifier')
	, n.s.exist('ns1:Params')
from @xml.nodes( '/Requests' ) n(s)
option( optimize for ( @xml = null ) )


А вот когда я пытаюсь распарсить все, что находится внутри тега Params, то мне ничего не возвращается, хотя из xml файла видно, что тег Id там есть.

Пробовал так:
;with xmlnamespaces ('http://test.ru/test.xsd' as ns1)
		select
			n.c.value( 'ns1:Id[1]', 'uniqueidentifier' )
			,n.c.exist('ns1:Id[1]')
		from @xml.nodes( '/Requests/Params') n(c)
		option( optimize for ( @xml = null ) )


Потом так:
		select
			n.c.value( 'Id[1]', 'uniqueidentifier' )
			,n.c.exist('Id[1]')
		from @xml.nodes( '/Requests/Params') n(c)
		option( optimize for ( @xml = null ) )



У меня небольшой опыт работы с XQuery и xml, подскажите пожалуйста, что я делаю не так?
20 дек 13, 10:14    [15321603]     Ответить | Цитировать Сообщить модератору
 Re: Помогите распарсить xml  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
хмхмхм,

Достаточно было немного поиграться с неймспейсами:
with xmlnamespaces ('http://test.ru/test.xsd' as ns1)
select n.c.value('ns1:Id[1]', 'uniqueidentifier'), n.c.exist('ns1:Id[1]')
from @xml.nodes( '/Requests/ns1:Params') n(c);
20 дек 13, 10:21    [15321646]     Ответить | Цитировать Сообщить модератору
 Re: Помогите распарсить xml  [new]
хмхмхм
Guest
Ennor Tiegael,

Спасибо большое
20 дек 13, 10:49    [15321796]     Ответить | Цитировать Сообщить модератору
 Re: Помогите распарсить xml  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
можно так - для любого namespace
select n.c.value('*:Id[1]', 'uniqueidentifier'), n.c.exist('*:Id[1]')
from @xml.nodes( '/Requests/*:Params') n(c);
20 дек 13, 13:04    [15322691]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить