如何在根元素上指定属性?



短版

使用SQL ServerFOR XML ROOT('Customers'),我如何添加属性到根节点?

<Customers> ← attributes here
<Customer>Ian</Customer>
<Customer>Shelby</Customer>
<Customer>Dave</Customer>
</Customers>

长版本当SQL Server使用FOR XML时:

SELECT *
FROM (VALUES
(122, 'All-Purpose Bike Stand'),
(119, 'Bike Wash'),
(115, 'Cable Lock')
) AS Products(ProductModelID, Name)
FOR XML PATH('Product')

通常只返回元素:

<Product>
<ProductModelID>122</ProductModelID>
<Name>All-Purpose Bike Stand</Name>
</Product>
<Product>
<ProductModelID>119</ProductModelID>
<Name>Bike Wash</Name>
</Product>
<Product>
<ProductModelID>115</ProductModelID>
<Name>Cable Lock</Name>
</Product>
(3 rows affected)

这不是一个有效的XML文档,因为有三个顶级节点-而不是只有一个。

可以通过指定ROOT('RootNodeName'):

来修复。
SELECT *
FROM (VALUES
(122, 'All-Purpose Bike Stand'),
(119, 'Bike Wash'),
(115, 'Cable Lock')
) AS Products(ProductModelID, Name)
FOR XML PATH('Product'), ROOT('Products')
<Products>
<Product>
<ProductModelID>122</ProductModelID>
<Name>All-Purpose Bike Stand</Name>
</Product>
<Product>
<ProductModelID>119</ProductModelID>
<Name>Bike Wash</Name>
</Product>
<Product>
<ProductModelID>115</ProductModelID>
<Name>Cable Lock</Name>
</Product>
</Products>
(3 rows affected)

优秀。除了属性

上面的内容很好,但是我还没有完成需要生成的XML文档。我需要为根节点添加一些属性:

<Products operationalMode="Test" batchDate="2021-02-15T17:36:22" formatId="8e884ace-bee4-11e4-8dfc-aa07a5b093db">
<Product>
<ProductModelID>122</ProductModelID>
<Name>All-Purpose Bike Stand</Name>
</Product>
<Product>
<ProductModelID>119</ProductModelID>
<Name>Bike Wash</Name>
</Product>
<Product>
<ProductModelID>115</ProductModelID>
<Name>Cable Lock</Name>
</Product>
</Products>

我如何添加属性到XML ROOT('rootNode')元素?

请尝试以下解决方案。

XML至少应该格式良好. 为了有效,它需要一个XML Schema。

不清楚这些属性的来源,所以我只是硬编码它们的值。

如您所见,我们需要应用FOR XML PATH子句两次。一次用于"内部"XML。第二次为根元素,并通过带有@的别名指定属性。

/p>

SELECT 'Test'AS [@operationalMode]
, '2021-02-15T17:36:22' AS [@batchDate]
, '8e884ace-bee4-11e4-8dfc-aa07a5b093db' AS [@formatId]
, (
SELECT *
FROM (VALUES
(122, 'All-Purpose Bike Stand'),
(119, 'Bike Wash'),
(115, 'Cable Lock')) AS Products(ProductModelID, Name)
FOR XML PATH('Product'), TYPE
)
FOR XML PATH('Products'), TYPE;

<Products operationalMode="Test" batchDate="2021-02-15T17:36:22" formatId="8e884ace-bee4-11e4-8dfc-aa07a5b093db">
<Product>
<ProductModelID>122</ProductModelID>
<Name>All-Purpose Bike Stand</Name>
</Product>
<Product>
<ProductModelID>119</ProductModelID>
<Name>Bike Wash</Name>
</Product>
<Product>
<ProductModelID>115</ProductModelID>
<Name>Cable Lock</Name>
</Product>
</Products>

相关内容

  • 没有找到相关文章

最新更新