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

Итак, фсе было хорошо... но вот

 , Beach = (select [data()] = n.value('@Name', 'nvarchar(512)') 

собирает xml в namespace 'urn:schemas-som-ru:tws-reservationHotelDescription'

<ul xmlns="urn:schemas-som-ru:tws-reservationHotelDescription"><li><ul xmlns="urn:schemas-som-ru:tws-reservationHotelDescription"><li>Оборудован до 30 сентября<ul xmlns="urn:schemas-som-ru:tws-reservationHotelDescription"><li>бар </li><li>душевые </li><li>зонты </li><li>кабинки для переодевания </li><li>кафе </li><li>лежаки </li><li>пляжные полотенца в номерах</li><li>шезлонги </li></ul></li><li>Расстояние до пляжа 10 м<ul xmlns="urn:schemas-som-ru:tws-reservationHotelDescription"><li>песчано-галечный </li><li>собственный </li></ul></li></ul>Услуги<ul xmlns="urn:schemas-som-ru:tws-reservationHotelDescription"><li>Водо-моторные виды спорта (за дополнительную плату) </li></ul></li></ul>

Кто знает, как и где надо пнуть, чтобы
 , Beach = (select [data()] = n.value('@Name', 'nvarchar(512)') 

собирал без namespace-а?

alter FUNCTION dbo.Description2Description
( @Descr xml )
RETURNS TABLE 
AS
RETURN 
(
with XMLNAMESPACES ( DEFAULT 'urn:schemas-som-ru:tws-reservationHotelDescription' )
  , inf  as ( select  [Type]  = d.value( '(@HotelTypeName)[1]', 'nvarchar(256)' ) 
                    , [Level] = d.value( '(@Level)[1]', 'nvarchar(256)' )
                    , Hotel   = d.value( '(@HotelName)[1]', 'nvarchar(256)' )
                    , Town    = d.value( '(@TownName)[1]', 'nvarchar(256)' ) 
                    , Country = d.value( '(@CountryName)[1]', 'nvarchar(256)' )
                    , [Description] = d.value( '(@Description)[1]', 'nvarchar(max)')
                from @Descr.nodes('/HotelDescription') as x(d)
            )
  ---------------------------------------------------------------------------------
  select Info =  inf.[Type] + N' ' + inf.[Level]
               + N': '  + inf.Hotel
               + iif( charindex( inf.Town, inf.Hotel) <> 0, '', N', ' + inf.Town )
               + N'; '  + inf.Country
               + N'<br>'
               + inf.Description
  ---------------------------------------------------------------------------------
       , Beach = (select [data()] = n.value('@Name', 'nvarchar(512)') 
                       , ( select [data()] = n.value('@Name', 'nvarchar(512)') + ' ' + isnull( n.value('@Description', 'nvarchar(max)'), N'' ) 
                                , ( select  n.value('@Name', 'nvarchar(512)') + ' ' + isnull( n.value('@Description', 'nvarchar(max)'), N'' ) from c.n.nodes('./ContentList/Content') as сс(n) for xml path('li'), root('ul'), type )
                             from b.n.nodes('./ContentList/Content') as c(n) for xml path('li'), root('ul'), type 
                         )
                       , [data()] = 'Услуги'
                       , ( select  [data()] = n.value('@Name', 'nvarchar(512)') + ' ' + isnull( n.value('@Description', 'nvarchar(max)'), N'' ) from b.n.nodes('./BeachServiceList/BeachService') as s(n) for xml path('li'), root('ul'), type )
                  from @Descr.nodes('HotelDescription/BeachList/Beach') as b(n)
                  for xml path('li'), root('ul')
                 )
31 мар 17, 11:19    [20353752]     Ответить | Цитировать Сообщить модератору
 Re: борьба за правильный namespace!  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1433
aleks2,

известное поведение for xml path,

мелкомягкие вроде что то обещали еще с этим сделать еще в 2013 году вроде. но так и забили.

для убирания пространства имен из дочерних узлов необходимо использовать for xml raw, или перейти на Explicit
31 мар 17, 11:31    [20353815]     Ответить | Цитировать Сообщить модератору
 Re: борьба за правильный namespace!  [new]
aleks2
Guest
felix_ff
aleks2,

известное поведение for xml path,

мелкомягкие вроде что то обещали еще с этим сделать еще в 2013 году вроде. но так и забили.

для убирания пространства имен из дочерних узлов необходимо использовать for xml raw, или перейти на Explicit


Не, это как-то совсем безысходно.

Бум надеяться на великих гуру!
31 мар 17, 11:37    [20353861]     Ответить | Цитировать Сообщить модератору
 Re: борьба за правильный namespace!  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Грязный хак: xml в строку, из строки вырезать xmlns="urn:schemas-som-ru:tws-reservationHotelDescription" и обратно в xml.
31 мар 17, 11:55    [20353947]     Ответить | Цитировать Сообщить модератору
 Re: борьба за правильный namespace!  [new]
aleks2
Guest
invm
Грязный хак: xml в строку, из строки вырезать xmlns="urn:schemas-som-ru:tws-reservationHotelDescription" и обратно в xml.

Я так и задумал... в случае чего.
Но хотелось честно.
31 мар 17, 11:58    [20353959]     Ответить | Цитировать Сообщить модератору
 Re: борьба за правильный namespace!  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1433
aleks2,

а чего там надеяться?
они сорцы что ли перекомпилят?

вот обсуждения проблемы:
тынц
тынц2

ну и щедевральное мелкомягких:
ТЫНЦ

Кстати я в свое время проголосовал гоу добавлять голоса, там тикет до сих пор открыт.

p.s. да в обсуждениях там предлагают некоторые извращения с UDF, что приводит к необходимому результату.
31 мар 17, 11:59    [20353969]     Ответить | Цитировать Сообщить модератору
 Re: борьба за правильный namespace!  [new]
aleks2
Guest
felix_ff
aleks2,

а чего там надеяться?
они сорцы что ли перекомпилят?

вот обсуждения проблемы:
тынц
тынц2

ну и щедевральное мелкомягких:
ТЫНЦ

Кстати я в свое время проголосовал гоу добавлять голоса, там тикет до сих пор открыт.

p.s. да в обсуждениях там предлагают некоторые извращения с UDF, что приводит к необходимому результату.


Я тебе верю.

UDF писать - не вариант.
31 мар 17, 12:04    [20353997]     Ответить | Цитировать Сообщить модератору
 Re: борьба за правильный namespace!  [new]
aleks2
Guest
aleks2
invm
Грязный хак: xml в строку, из строки вырезать xmlns="urn:schemas-som-ru:tws-reservationHotelDescription" и обратно в xml.

Я так и задумал... в случае чего.
Но хотелось честно.


Сволочизм то в чем?

Я готов не объявлять
with XMLNAMESPACES ( DEFAULT 'urn:schemas-som-ru:tws-reservationHotelDescription' )

а работать с
with XMLNAMESPACES ( 'urn:schemas-som-ru:tws-reservationHotelDescription' as NS )

и нарисовать ссылки на NS, всюду, где надо при разборе xml.

from b.n.nodes('./NS:ContentList/NS:Content') as c(n) for xml path('li'), root('ul'), type


HO! При сборке xml, все равно, лезет 'urn:schemas-som-ru:tws-reservationHotelDescription'.
31 мар 17, 12:09    [20354020]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить