Построить XML вне общего табличного выражения - PullRequest
0 голосов
/ 12 августа 2010

Я использую CTE для получения данных, которые я сохранил в рекурсивной таблице.Проблема в том, что я пытаюсь выяснить, как я могу использовать «FOR XML» для создания желаемого XML-вывода.У меня есть таблица содержания, которую я рекурсирую, и я хочу иметь возможность использовать эти данные для генерации XML.

Вот пример того, с чем данные похожи:

ID|TOC_ID|TOC_SECTION|TOC_DESCRIPTON|PARENT_ID
1|I|Chapter|My Test Chapter|-1
2|A|Section|My Test Section|1
3|1|SubSection|My SubSection|2

Я хочу иметь возможность выкладывать данные следующим образом:

Атрибуты XML: ID = Добавленные значения из поля TOC_ID Значение = значение из поля TOC_Section

<FilterData>
  <Filter id="I" value="Chapter">
    <Description>My Test Chapter</Description>
      <Filter id="I_A" value="Section">
        <Description>My Test Section</Description>
          <Filter id="I_A_1" value="SubSection">
            <Description>My Test SubSection</Description>
          </Filter>
      </Filter>
  </Filter>
</FilterData>

Не знаю какЯ могу взять данные CTE и произвести формат, аналогичный приведенному выше.Когда данные находятся в отдельных таблицах, не так уж сложно построить вывод такого типа.

Как всегда, оцените ввод.

Спасибо,

S

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Вы можете получить некоторое расстояние от Рекурсивных иерархий до XML в блоге Кристиана Уэйда - мне все это кажется очень болезненным!

0 голосов
/ 13 августа 2010

Проверьте это, Уилл (Не уверен, что вы все еще следите) .... у этого есть максимум 32 уровня, но это все равно должно работать хорошо для моих вещей ... не могу видеть, углубляясь, чем это.Нашел это на другом форуме:

CREATE TABLE tree ( id INT, name VARCHAR(5), parent_id INT )

GO

INSERT INTO tree VALUES ( 1, 'N1', NULL )

INSERT INTO tree VALUES ( 3, 'N4', 1 )

INSERT INTO tree VALUES ( 4, 'N10', 3 )

INSERT INTO tree VALUES ( 5, 'N7', 3 )

GO



CREATE FUNCTION dbo.treeList(@parent_id int)

RETURNS XML

WITH RETURNS NULL ON NULL INPUT

BEGIN RETURN

(SELECT id as "@id", name as "@name",

CASE WHEN parent_id=@parent_id

THEN dbo.treeList(id)

END

FROM dbo.tree WHERE parent_id=@parent_id

FOR XML PATH('tree'), TYPE)

END

GO



SELECT id AS "@id", name AS "@name",

CASE WHEN id=1

THEN dbo.treeList(id)

END

FROM tree

WHERE id=1

FOR XML PATH('tree'), TYPE

Разве это не так мило и просто?

Настроен из великолепного примера на http://msdn.microsoft.com/en-us/library/ms345137.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...