Только начал разбираться с возможностями работы с xml из MsSQL 2005.
Какие то простые примеры уже получаются, но мне нужно распарсить xml содержаший элементы с ":"
Подозреваю что нужно как то определять, работать со схемами,
но что с ним делать совершенно не понятно.
в примере нужно разобрать закомментированный @xml2
declare @xml1 xml, @xml2 xml
set @xml2 = '<root> <t> ' +
' <n>1</n> ' +
' <vdate dt="2009-01-18">' +
' <vtime>18:05</vtime> '+
' <vtime>18:35</vtime> '+
' </vdate>'+
' </t> '+
' <t> ' +
' <n>2</n> ' +
' <vdate dt="2009-01-20">' +
' <vtime>20:05</vtime> '+
' <vtime>20:35</vtime> '+
' </vdate>'+
' </t> </root>'
create table #t ( XmlDescription xml )
/*
set @xml2 = '<root> <t> ' +
' <n>1</n> ' +
' <v:date dt="2009-01-18">' +
' <v:time>18:05</v:time> '+
' <v:time>18:35</v:time> '+
' </v:date>'+
' </t> '+
' <t> ' +
' <n>2</n> ' +
' <v:date dt="2009-01-20">' +
' <v:time>20:05</v:time> '+
' <v:time>20:35</v:time> '+
' </v:date>'+
' </t> </root>'
*/
insert into #t
select @xml2
select n
, vdate
, T2.Loc.value('text()[1]', 'varchar(50)') vtime
from (
select n
, T2.Loc.value('@dt', 'varchar(50)') vdate
, T2.Loc.query('vtime') x
from ( select T2.Loc.value('n[1]', 'varchar(50)') n
, T2.Loc.query('vdate') x
from #t T
CROSS APPLY XmlDescription.nodes('/root/t') as T2(Loc)
) t
CROSS APPLY x.nodes('/vdate' ) as T2(Loc)
) t
CROSS APPLY x.nodes('vtime' ) as T2(Loc)
drop table #t
после того как данные попадут в таблицу, мне нужно собрать их в xml другой структуры
сейчас собираю запросом
select ..... for xml auto, type, elements
но может быть можно тоже самое сделать через ssis объектом "XML Task"?
Кто нибудь пробовал? поделитесь пожалуйста примером.