SQL Server 2005 FOR XML - PullRequest
       12

SQL Server 2005 FOR XML

1 голос
/ 12 мая 2010

Я хочу экспортировать данные из таблицы в специально отформатированный файл XML. Я довольно новичок в XML-файлах, поэтому то, что мне нужно, может быть совершенно очевидно, но я просто не могу найти то, что я ищу в сети.

Формат результатов XML, которые мне нужны:

    <data>
        <event 
            start="May 28 2006 09:00:00 GMT"
            end="Jun 15 2006 09:00:00 GMT"
            isDuration="true"
            title="Writing Timeline documentation"
            image="http://simile.mit.edu/images/csail-logo.gif">
            A few days to write some documentation
        </event>
     </data>

Моя структура таблицы:

name VARCHAR(50),
description VARCHAR(255),
startDate DATETIME,
endDate DATETIME

(меня не очень интересует изображение полей XML или isDuration на данный момент).

Я пытался:

SELECT [name]
           ,[description]
           ,[startDate]
           ,[endTime]

  FROM [testing].[dbo].[time_timeline]
  FOR XML RAW('event'), ROOT('data'), type

Что дает мне:

<data>
    <event name="Test1" 
           description="Test 1 Description...." 
           startDate="1900-01-01T00:00:00" 
           endTime="1900-01-01T00:00:00" 
    />
    <event name="Test2" 
           description="Test 2 Description...." 
           startDate="1900-01-01T00:00:00" 
           endTime="1900-01-01T00:00:00" 
    />
</data>

Чего мне не хватает, так это того, что описание должно быть за пределами атрибутов события и должен быть тег.

Кто-нибудь может указать мне правильное направление или указать мне учебник или подобное о том, как это сделать?

Спасибо

Мэтт

Ответы [ 2 ]

2 голосов
/ 12 мая 2010

Это должно сделать работу:

SELECT
    name "event/@name"
    , startDate "event/@start"
    , description "event"
FROM
    [testing].[dbo].[time_timeline]
FOR XML PATH(''), ROOT('data')

На что обратить внимание:

  • Чтобы получить description в качестве текстового содержимого event, нам нужно «повысить уровень» и использовать PATH('') и указать имя event в псевдониме для всех столбцов
  • Все столбцы, ориентированные на атрибуты, должны находиться перед всеми столбцами, не ориентированными на атрибуты

Для изучения этого материала (или, по крайней мере, для получения представления о том, как делать то, что вы хотите), посмотрите документы для FOR XML и просто поиграйте со своими таблицами и желаемыми структурами XML. 1019 *

1 голос
/ 12 мая 2010

Рассмотрите возможность перехода на FOR XML PATH (см. http://msdn.microsoft.com/en-us/library/ms189885.aspx для документации)

Очень частичный пример:

SELECT
    [name] 
   ,[description] 
   ,[startDate]   "@start"
   ,[endTime]     "@end"
  FROM [testing].[dbo].[time_timeline] 
  FOR XML PATH('event'), ROOT('data')
...