2012-03-29 12 views
17

Sto tentando di esportare alcuni dati da un database in un particolare formato XML specificato dal cliente. L'XML che produco sarà manipolato (presumibilmente da XSLT) da una terza parte per produrre l'output finale, ma voglio formulare il mio XML il più vicino possibile a quel formato.SQL FOR XML: emissione di dati come elementi o attributi

Il cliente ha richiesto i dati su ogni prodotto in questo modo:

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

My SQL esistente è:

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

... che rende:

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

Mi aspetto che è abbastanza facile manipolare questi dati in XSLT, ma puramente come esercizio intellettuale, mi piacerebbe vedere quanto lontano potrei SQL. La mia prima ambizione era semplicemente esprimere l'id come attributo del prodotto piuttosto che come elemento figlio. Il rendering dell'elemento activeState che stavo per lasciare all'XSLT, ma chiaramente, se posso aiutarli sulla loro strada, perché non farlo ...

Qualche suggerimento?

risposta

27

Utilizzare @ per creare attributi.

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') 
+0

Funziona a meraviglia - grazie. – CJM

Problemi correlati