Я пытаюсь использовать функцию SQL-сервера FOR XML
для генерации некоторого XML с определенными пространствами имен.Как я могу использовать предложение WITH XMLNAMESPACES с коррелированными запросами?
Моя цель XML должен выглядеть примерно так:
<ns1:CustomerInvoices xmlns:ns1="urn:example.com:Invoice:01.00">
<CustomerInvoice>
<Header>
<OrderDate>2001-11-13T00:00:00</OrderDate>
<SalesOrderNumber>SO44643</SalesOrderNumber>
</Header>
<Lines>
<LineTotal>3578.270000</LineTotal>
<UnitPrice>3578.2700</UnitPrice>
<OrderQty>1</OrderQty>
</Lines>
</CustomerInvoice>
<CustomerInvoice>...(abbreviated)...</CustomerInvoice>
</ns1:CustomerInvoices>
У меня есть проблема, в том, что, когда я использую пункт WITH XMLNAMESPACES
, на множество дочерних узлов, которые партия потребителей третьей появляется объявление пространства имен этот XML будет "предпочитают не", то есть я делаю что-то вроде:
Use AdventureWorks2008
;WITH XMLNAMESPACES ('urn:example.com:Invoice:01.00' as ns1)
SELECT (SELECT hdr.OrderDate,
hdr.SalesOrderNumber
FOR XML PATH (''), TYPE) AS Header,
(SELECT line.LineTotal,
line.UnitPrice,
line.OrderQty
FROM Sales.SalesOrderDetail AS line
WHERE line.SalesOrderID = hdr.SalesOrderID
FOR XML PATH (''), TYPE) AS Lines
FROM Sales.SalesOrderHeader AS hdr
WHERE hdr.ModifiedDate = '2001-11-20'
FOR XML PATH('CustomerInvoice'), ROOT('ns1:CustomerInvoices')
что дает:
<ns1:CustomerInvoices xmlns:ns1="urn:example.com:Invoice:01.00">
<CustomerInvoice>
<Header>
<OrderDate xmlns:ns1="urn:example.com:Invoice:01.00">2001-11-13T00:00:00</OrderDate>
<SalesOrderNumber xmlns:ns1="urn:example.com:Invoice:01.00">SO44643</SalesOrderNumber>
</Header>
<Lines>
<LineTotal xmlns:ns1="urn:example.com:Invoice:01.00">3578.270000</LineTotal>
<UnitPrice xmlns:ns1="urn:example.com:Invoice:01.00">3578.2700</UnitPrice>
<OrderQty xmlns:ns1="urn:example.com:Invoice:01.00">1</OrderQty>
</Lines>
</CustomerInvoice>
<CustomerInvoice>...(abbreviated)...</CustomerInvoice>
</ns1:CustomerInvoices>
Можно ли настроить запрос, чтобы получить правильные пространства имен, или мне придется загрузить это в «что-то еще», чтобы удалить избыточные объявления пространства имен?
Может быть повторением: http://stackoverflow.com/questions/3242070/how-do-i-remove-redundant-namespace-in-nested -query-when-use-for-xml-path – granadaCoder
Также отображается http://stackoverflow.com/q/11221375/50447 –