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

Откуда: Moscow
Сообщений: 179
Есть таблица, записи которой надо выгрузить в xml.
Каждая запись должна быть вложенным элементом одного корневого элемента этого xml.
Кроме того, атрибутами корневого элемента должны быть значения определенных переменных.
Должен получиться вот такой XML:
+
<Report ReportName="Param1" ReportDate="2012-04-26T18:28:48.537">
  <Item>
    <Code>1</Code>
    <Name>1111</Name>
  </Item>
  <Item>
    <Code>2</Code>
    <Name>2222</Name>
  </Item>
  <Item>
    <Code>3</Code>
    <Name>3333</Name>
  </Item>
</Report>

И еще - корневой элемент должен содержать xmlns="uri", но вложенные элементы должны быть без xmlns.
Попробовал сделать так, как написано ниже, может как-то криво, мало опыта работы в MS SQL с XML.
Так вот, если в приведенном примере раскоментить WITH XMLNAMESPACES, то xmlns впихивается и во вложенные элементы. Почему так? И как это обойти? Или как по другому сформировать xml?
-- таблица в базе, записи которй надо выгрузить в xml
-- каждая запись должна быть элементом, вложенным в корневом элементе xml файла
DECLARE @tab AS TABLE (Code INT, Name NVARCHAR(10));
INSERT INTO @tab VALUES (1, '1111');
INSERT INTO @tab VALUES (2, '2222');
INSERT INTO @tab VALUES (3, '3333');

-- внешние параметры, котрые необходимо сделать атрибутами корневого элемента
DECLARE @Param1 NVARCHAR(MAX);
set @Param1 = 'Param1'
DECLARE @Param2 DATETIME;
set @Param2 = GETDATE();

--WITH XMLNAMESPACES (DEFAULT 'http://tempuri.org/XMLSchema.xsd')
SELECT 
    @Param1 AS ReportName
  , @Param2 AS ReportDate
  ,
	  (
	    SELECT Item.* FROM @tab Item FOR XML AUTO, ELEMENTS , TYPE 
	  )
FROM ( SELECT 1 c	) [Report]
FOR XML AUTO

Если в приведенном примере раскоментить WITH XMLNAMESPACES, то получаем это:
+
<Report xmlns="http://tempuri.org/XMLSchema.xsd" ReportName="Param1" ReportDate="2012-04-26T18:40:48.213">
  <Item xmlns="http://tempuri.org/XMLSchema.xsd">
    <Code>1</Code>
    <Name>1111</Name>
  </Item>
  <Item xmlns="http://tempuri.org/XMLSchema.xsd">
    <Code>2</Code>
    <Name>2222</Name>
  </Item>
  <Item xmlns="http://tempuri.org/XMLSchema.xsd">
    <Code>3</Code>
    <Name>3333</Name>
  </Item>
</Report>


Еще пробовал добавить такое поле:
, 'http://tempuri.org/XMLSchema.xsd' AS xmlns
Получается почти так же, xmlns остается во вложенных элементах, но хотя бы пустой.
+
-- таблица в базе, записи которй надо выгрузить в xml
-- каждая запись должна быть элементом, вложенным в корневом элементе xml файла
DECLARE @tab AS TABLE (Code INT, Name NVARCHAR(10));
INSERT INTO @tab VALUES (1, '1111');
INSERT INTO @tab VALUES (2, '2222');
INSERT INTO @tab VALUES (3, '3333');

-- внешние параметры, котрые необходимо сделать атрибутами корневого элемента
DECLARE @Param1 NVARCHAR(MAX);
set @Param1 = 'Param1'
DECLARE @Param2 DATETIME;
set @Param2 = GETDATE();

SELECT 
    @Param1 AS ReportName
  , @Param2 AS ReportDate
  ,
	  (
	    SELECT Item.* FROM @tab Item FOR XML AUTO, ELEMENTS , TYPE 
	  )
	, 'http://tempuri.org/XMLSchema.xsd' AS xmlns
FROM ( SELECT 1 c	) [Report]
FOR XML AUTO
Получаем такое:
<Report ReportName="Param1" ReportDate="2012-04-26T18:44:07.673" xmlns="http://tempuri.org/XMLSchema.xsd">
  <Item xmlns="">
    <Code>1</Code>
    <Name>1111</Name>
  </Item>
  <Item xmlns="">
    <Code>2</Code>
    <Name>2222</Name>
  </Item>
  <Item xmlns="">
    <Code>3</Code>
    <Name>3333</Name>
  </Item>
</Report>

Как вообще избавиться от xmlns во вложеных элементах?
26 апр 12, 18:48    [12476193]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
suppress namespace attributes in nested SELECT FOR XML statements
+1
26 апр 12, 23:12    [12476959]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
MaratSH
Member

Откуда: Moscow
Сообщений: 179
Mnior
suppress namespace attributes in nested SELECT FOR XML statements
+1

Спасибо большое, Minor!
Надежды пропали! Будем клеить строки клеем .... )

Сначала:
Posted by Microsoft on 13.04.2007 at 13:31
Dear Michael

Thanks for the feedback. We will be looking into your suggestion for a future release of SQL Server.

Best regards
Michael

И так далее..., ждем..., ждем...
И вот:
Posted by Microsoft on 14.01.2011 at 15:55
H all...
...
..., we are looking into removing the namespace declarations in nested FOR XML output...
...
Best regards
Michael
И продолжаем ждать...
Которая версия сервака уже вышла за все эти 4 с лишним года?
Как будто ни кто не формирует XML данные средствами MS SQL сервера... Кошмар...
27 апр 12, 11:33    [12478580]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
мимо
Guest
MaratSH
Как будто ни кто не формирует XML данные средствами MS SQL сервера

Очень редко.
27 апр 12, 11:44    [12478678]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
мимо
Очень редко.
Если бы. Многие норовят из RDBS сделать универсальный комбайн.
Даже банально на SQLXMLOLEDB Provider не хотят смотреть.
27 апр 12, 11:54    [12478763]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
MaratSH
Member

Откуда: Moscow
Сообщений: 179
Mnior
мимо
Очень редко.
Если бы. Многие норовят из RDBS сделать универсальный комбайн.
Даже банально на SQLXMLOLEDB Provider не хотят смотреть.


Это что, SQLXMLOLEDB серьезное средство :)) ?
И потом, вашей логикой рассуждать, то кроме SQL-92 не фиг вообще ни чем пользоваться, пусть нежная и слабая ЭРДЭБЭМЭЭСина живет себе спокойно как хранилище, умеющее оптимизировать прием и выдачу данных.
27 апр 12, 12:08    [12478860]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
MaratSH
Member

Откуда: Moscow
Сообщений: 179
MaratSH
И потом, вашей логикой рассуждать, то кроме SQL-92 не фиг вообще ни чем пользоваться, пусть нежная и слабая ЭРДЭБЭМЭЭСина живет себе спокойно как хранилище, умеющее оптимизировать прием и выдачу данных.

Посмотрите в сторону оракла... чего там только нельзя сделать )
27 апр 12, 12:09    [12478872]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
MaratSH
... чего там только нельзя сделать
Унибардачно. Свалка "решений".
В итоге встречаются одни императивные быдлокодные системы.
Современному homo addictus без ограничений видимо никуда.

Про оракакл вы зря. Багов/особенностей там далеко не меньше. Не трольте.

MaratSH
Это что, SQLXMLOLEDB серьезное средство
Пустословие. Говорите по делу.
27 апр 12, 12:34    [12479036]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
мимо
Guest
MaratSH
пусть нежная и слабая ЭРДЭБЭМЭЭСина живет себе спокойно как хранилище, умеющее оптимизировать прием и выдачу данных.

Полностью с вами согласен.
27 апр 12, 12:48    [12479150]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
MaratSH
Member

Откуда: Moscow
Сообщений: 179
Mnior
MaratSH
... чего там только нельзя сделать
Унибардачно. Свалка "решений".
В итоге встречаются одни императивные быдлокодные системы.
Современному homo addictus без ограничений видимо никуда.

Про оракакл вы зря. Багов/особенностей там далеко не меньше. Не трольте.

MaratSH
Это что, SQLXMLOLEDB серьезное средство
Пустословие. Говорите по делу.


о да, начало про SQLXMLOLEDB - это не тролинг ))
вы видимо всегда правы и вы бог в суждениях обо всем ))
все те, кого я знаю, и кто много работал на обеих системах (MS и Oracel) всегда предпочитают Oracle. а про баги , давайте не будем , и про быдлокод.. уж что-что, а на быдлокод больше мелкософтовская rdbms похожа! это мое мнение, в противовес вашему божественному )) я не говорю про что-то другое, а именно про ms sql рожденный (украденый? купленый?) из недр сайБЕСа.
27 апр 12, 13:31    [12479520]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
MaratSH
Blа-bla-bla
[ничего по делу, только слюни и брызги]
Blа-bla-bla
Ok, вы правы, вы привели столько везких и чётко проверяемых аргументов. Сходу ответили на вопросы неприменимости SQLXMLOLEDB ни в данном случае ни вообще. Привели обширную статистику, и каждый со своим опытом с вами согласится, естественно - все же ваши клиенты. А я тут по незнаю глупость сморозил, и отсутсвию опыта, и на аргументы не обращал внимание, простите бедолагу.
MaratSH
SQLXMLOLEDB - это не тролинг
Ну да. Ответ на вопрос это троллинг, а авторитарное пустословие - нет троллинг. Ну-ну.
Так и до бана не далеко. Божественный вы наш.
27 апр 12, 14:06    [12479793]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
MaratSH
Member

Откуда: Moscow
Сообщений: 179
Mnior
Так и до бана не далеко. Божественный вы наш.

Это угрозы? ТЫ так крут! Это ТВОЙ мир.. вах... ТЫ в нем БОГ...
27 апр 12, 14:44    [12480118]     Ответить | Цитировать Сообщить модератору
 Re: как обернуть xml элементы в один корневой элемент с xmlns, но без xmlns в элементах?  [new]
iljy
Member

Откуда:
Сообщений: 8711
MaratSH
Mnior
Так и до бана не далеко. Божественный вы наш.

Это угрозы? ТЫ так крут! Это ТВОЙ мир.. вах... ТЫ в нем БОГ...

А ты хамло, и в добавок не шибко умное. Для мерянья длинной движков давным-давно отведен отдельный форум с линейками у писсуаров. И если ты думаешь, что ты первый, кто пришел сюда и возвестил о крутости ИНОЙ СУБД, то ты еще глупее. Настоящие спецы и в Оракле, и в MS SQL/Sybase, понимают достоинства каждого инструмента и умеют их использовать, а 99% ораклятых освоили дай бог 1% возможностей, причем самых примитивных и, в общем-то, СУБД не супернеобходимых, и, поскольку ничем другим пользоваться не умеют, пишут феерический говнокод и орут, что их лишили САМОГО ГЛАВНОГО, как будто их и правда лишили.
27 апр 12, 16:38    [12481204]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить