我正在尝试以客户指定的特定XML格式从数据库导出一些数据。我生成的XML将由第三方操纵(可能是由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,但显然,如果我可以帮助他们,那么为什么不这样做呢?
有什么建议吗?
答案 0 :(得分:33)
使用@
创建属性。
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')