【发布时间】:2016-10-09 18:55:28
【问题描述】:
我使用 for xml 选择来生成一个 xml 文件。 我希望有两个根节点,其中包含一些标题标签,然后详细说明表查询结果的行。
例子:
<Root>
<FileHeader>
HEADER ROWS
</FileHeader>
<Jobs>
<Message xmlns="url">
<Header Destination="1" xmlns="url"/>
<Body>
<ListItem xmlns="url">
DETAIL ROWS FROM SELECT
</ListItem>
</Body>
</Message>
</Jobs>
</Root>
我试图生成的查询是这个:
WITH XMLNAMESPACES('url')
SELECT(
SELECT
HEADER ROWS
FOR XML PATH('FileHeader'),
TYPE),
(SELECT
'1' AS 'Message/Header/@Destination',
'url' AS 'Message/Header/@xmlns'
FOR XML PATH(''),
TYPE),
(SELECT
DETAIL ROWS FROM SELECT
FROM MY_TABLE
FOR XML PATH('Jobs'),ROOT('Body'),
TYPE )
FOR XML PATH ('Root')
MY_table 及其数据无关紧要,因为最终选择中的所有标签都是正确的,都针对 xsd 模式进行了验证。 FileHeader 和 Header 标记由变量给出的值填充,因此此处不使用表。
我在查询的中间部分(第二个选择)遗漏了一些东西。以我的方式,我不能在 Jobs/Body 路径中包含 Header 标记。
更重要的是,我无法填写 with xmlns 值。我什至使用了我在一些论坛上找到的以下内容,但仍然无法使用 xmlns 属性生成格式良好的标签。
;WITH XMLNAMESPACES ('url' as xmlns)
谢谢!
【问题讨论】:
-
也许我遗漏了一些东西,但我不知道您的最终 XML 应该是什么样子...您提供的 XML 在 Jobs/Body 路径中没有 Header 标记。请发布预期输出的示例。
标签: sql-server xml xml-namespaces for-xml-path