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

Откуда:
Сообщений: 1212
Привет коллеги.

Подскажите, у нас есть какие-то механизмы формирования XML по строке пути?


На входе, например, две строки

'Товары/Фрукты/Яблоки/Цена 300'
'Товары/Фрукты/Категория А-20'

А на выходе должной выйти

<Товары>
  <Фрукты>
    <Категория>А-20</Категория>
    <Яблоки>
        <Цена>300</Цена>
    </Яблоки>
  </Фрукты>
</Товары>
4 апр 18, 15:14    [21311986]     Ответить | Цитировать Сообщить модератору
 Re: Собрать XML по пути  [new]
court
Member

Откуда:
Сообщений: 1956
Cammomile,

навсякий, такое "народное творчество", в принципе, задачу решает :)

declare @t table (s varchar(100))
declare @SQL nvarchar(max)
declare @xml xml 

--
insert into @t
select 'Товары/Фрукты/Яблоки/Цена=300' union all
select 'Товары/Фрукты/Категория=А-20' union all
select 'Товары/@xz=1234567'

;with cte as (
	select
		pth	=left(s, charindex('=',s,1)-1)
		,data	=right(s, len(s)-charindex('=',s,1))
		,lvl	=len(left(s, charindex('=',s,1)-1))-len(replace(left(s, charindex('=',s,1)-1),'/','')) 
	from @t)

select @SQL=(select ''''+data+''' as ['+pth+'], ' from cte order by lvl for xml path(''))

--print @SQL
set @SQL =N'set @xml=(select '+left(@SQL,len(@SQL)-1)+' for xml path(''''),elements)' 
--print @SQL

--
exec sp_executesql @SQL, N'@xml xml out', @xml=@xml out 

select @xml  

<Товары xz="1234567">
  <Фрукты>
    <Категория>А-20</Категория>
    <Яблоки>
      <Цена>300</Цена>
    </Яблоки>
  </Фрукты>
</Товары>
4 апр 18, 17:51    [21312622]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить