23

我正在尝试以客户指定的特定 XML 格式从数据库中导出一些数据。我生成的 XML 将由第 3 方操作(可能由 XSLT)以生成最终输出,但我希望将我的 XML 格式化为尽可能接近该格式。

客户要求提供每种产品的数据,如下所示:

<product id="1234567890123">
    <activeState partNumber="A1234567890" shipmentDate="20110518" />
</product>

我现有的 SQL 是:

SELECT SerialNo as id, 
    PartNo as partNumber,
    CONVERT(VARCHAR(8), GETDATE(), 112) AS shipmentDate, 
FROM Products
WHERE SerialNo = @SerialNo
FOR XML PATH ('product'), TYPE)

...呈现:

<product>
  <id>100000000458</id>
  <partNumber>10004905892</partNumber>
  <shipmentDate>20120312</shipmentDate>
</product>

我希望在 XSLT 中操作这些数据很容易,但纯粹作为一种智力练习,我想看看我在 SQL 中能走多远。我的第一个目标是将 id 简单地表示为产品的属性而不是子元素。我打算将 activeState 元素的渲染留给 XSLT,但很明显,如果我能在他们的路上帮助他们,为什么不这样做......

有什么建议么?

4

1 回答 1

38

用于@创建属性。

select SerialNo as "@id",
       PartNo as "activeState/@partNumber",
       convert(varchar(8), getdate(), 112) as "activeState/@shipmentDate"
from Products
where SerialNo = @SerialNo
for xml path('product')
于 2012-03-29T15:27:52.367 回答