Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
iii2 Member Откуда: Сообщений: 202 |
Пример:if OBJECT_ID('tempdb..#t') is not null drop table #t; Create table #t (i int identity (1,1) not null ,f1 nvarchar(255) Null ,f2 nvarchar(255) Null ,ii int Null Constraint PK_i primary key clustered (i)) Insert into #t (f1, f2, ii) Values ('nom 1.', 'prim 1.', Null) , ('nom 1.', 'prim 2.', Null) , ('nom 1.', Null, Null) , ('nom 2.', Null, 1) , ('nom 2.a', Null, 1) , ('nom 2.b', Null, 1) , ('nom 2.b', 'prim 3.', 1) , ('nom 2.', Null, 2) Select * ,(select * from #t b where a.i = b.ii For xml path('prim'), ELEMENTS XSINIL, type ) from #t a For xml path('nom'), root('book'), ELEMENTS XSINIL, type Пример генерирует вот такой хмл: [SRC XML] <book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <nom> <i>1</i> <f1>nom 1.</f1> <f2>prim 1.</f2> <ii xsi:nil="true" /> <prim xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <i>4</i> <f1>nom 2.</f1> <f2 xsi:nil="true" /> <ii>1</ii> </prim> <prim xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <i>5</i> <f1>nom 2.a</f1> <f2 xsi:nil="true" /> <ii>1</ii> </prim> <prim xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <i>6</i> <f1>nom 2.b</f1> <f2 xsi:nil="true" /> <ii>1</ii> </prim> <prim xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <i>7</i> <f1>nom 2.b</f1> <f2>prim 3.</f2> <ii>1</ii> </prim> </nom> <nom> <i>2</i> <f1>nom 1.</f1> <f2>prim 2.</f2> <ii xsi:nil="true" /> <prim xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <i>8</i> <f1>nom 2.</f1> <f2 xsi:nil="true" /> <ii>2</ii> </prim> </nom> <nom> <i>3</i> <f1>nom 1.</f1> <f2 xsi:nil="true" /> <ii xsi:nil="true" /> </nom> <nom> <i>4</i> <f1>nom 2.</f1> <f2 xsi:nil="true" /> <ii>1</ii> </nom> <nom> <i>5</i> <f1>nom 2.a</f1> <f2 xsi:nil="true" /> <ii>1</ii> </nom> <nom> <i>6</i> <f1>nom 2.b</f1> <f2 xsi:nil="true" /> <ii>1</ii> </nom> <nom> <i>7</i> <f1>nom 2.b</f1> <f2>prim 3.</f2> <ii>1</ii> </nom> <nom> <i>8</i> <f1>nom 2.</f1> <f2 xsi:nil="true" /> <ii>2</ii> </nom> </book> Можно ли подавить повторные декларации xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" на уровне дочерних нод? |
19 сен 17, 14:21 [20806122] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
iii2, так?Select * ,(select * from #t b where a.i = b.ii For xml path('prim'), type ) from #t a For xml path('nom'), root('book'), ELEMENTS XSINIL, type |
19 сен 17, 14:31 [20806160] Ответить | Цитировать Сообщить модератору |
aleks222
Guest |
Вот так Select * , cast( (select * from #t b where a.i = b.ii For xml path('prim')) as xml ) from #t a For xml path('nom'), root('book'), ELEMENTS XSINIL, type |
19 сен 17, 15:24 [20806383] Ответить | Цитировать Сообщить модератору |
iii2 Member Откуда: Сообщений: 202 |
Minamoto, aleks222, какие хитрые! В этом случае не выводятся null значения в ветке prim. И потом, я немного не это имел ввиду. Я думал, может существует способ сообщить sql server-у, что этот хмл нужно весь генерировать в контексте этого пространства имен, задекларировать его (как то) в заголовке, и дальше уже получать нечто такое: <f2 xsi:nil="true" /> на любом уровне вложенности. |
19 сен 17, 16:03 [20806495] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
iii2,
|
||
19 сен 17, 16:22 [20806561] Ответить | Цитировать Сообщить модератору |
iii2 Member Откуда: Сообщений: 202 |
Minamoto, спасибо, понятно. Лучший вариант - забить. Если совсем припрёт - то банальным реплейсом прибить лишнее... Чудесно. |
19 сен 17, 17:46 [20806898] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
iii2, ну, в целом, да, учитывая тот факт, что на валидность XML это не влияет. |
19 сен 17, 18:41 [20807015] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |