Укажите XMLNAMESPACE в запросе SQL Server с помощью предложения For Xml, явный режим
Я пытаюсь сделать запрос к базе данных, используя FOR XML
пункт EXPLICIT
режим, но я не знаю, как указать XMLNAMESPACE и схемы при использовании этого режима так же, как с XMLNAMESPACE при использовании AUTO
режим или RAW
это MSDN
пример запроса, в результате его указывает Schema1
как схема для результата XML
USE AdventureWorks2012;
GO
SELECT 1 as Tag,
0 as Parent,
SalesOrderID as [OrderHeader!1!SalesOrderID!id],
OrderDate as [OrderHeader!1!OrderDate],
CustomerID as [OrderHeader!1!CustomerID],
NULL as [SalesPerson!2!SalesPersonID],
NULL as [OrderDetail!3!SalesOrderID!idref],
NULL as [OrderDetail!3!LineTotal],
NULL as [OrderDetail!3!ProductID],
NULL as [OrderDetail!3!OrderQty]
FROM Sales.SalesOrderHeader
WHERE SalesOrderID=43659 or SalesOrderID=43661
....
SELECT 3 as Tag,
1 as Parent,
SOD.SalesOrderID,
NULL,
NULL,
SalesPersonID,
SOH.SalesOrderID,
LineTotal,
ProductID,
OrderQty
FROM Sales.SalesOrderHeader SOH,Sales.SalesOrderDetail SOD
WHERE SOH.SalesOrderID = SOD.SalesOrderID
AND (SOH.SalesOrderID=43659 or SOH.SalesOrderID=43661)
ORDER BY [OrderHeader!1!SalesOrderID!id], [SalesPerson!2!SalesPersonID],
[OrderDetail!3!SalesOrderID!idref],[OrderDetail!3!LineTotal]
FOR XML EXPLICIT, XMLDATA
и вот пример результата:
<Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="OrderHeader" content="mixed" model="open">
<AttributeType name="SalesOrderID" dt:type="id" />
<AttributeType name="OrderDate" dt:type="dateTime" />
<AttributeType name="CustomerID" dt:type="i4" />
<attribute type="SalesOrderID" />
<attribute type="OrderDate" />
<attribute type="CustomerID" />
</ElementType>
<ElementType name="SalesPerson" content="mixed" model="open">
<AttributeType name="SalesPersonID" dt:type="i4" />
<attribute type="SalesPersonID" />
</ElementType>
<ElementType name="OrderDetail" content="mixed" model="open">
<AttributeType name="SalesOrderID" dt:type="idref" />
<AttributeType name="LineTotal" dt:type="number" />
<AttributeType name="ProductID" dt:type="i4" />
<AttributeType name="OrderQty" dt:type="i2" />
<attribute type="SalesOrderID" />
<attribute type="LineTotal" />
<attribute type="ProductID" />
<attribute type="OrderQty" />
</ElementType>
</Schema>
<OrderHeader xmlns="x-schema:#Schema1" SalesOrderID="43659" OrderDate="2001-07-01T00:00:00" CustomerID="676">
<SalesPerson SalesPersonID="279" />
<OrderDetail SalesOrderID="43659" LineTotal="10.373000" ProductID="712" OrderQty="2" />
...
</OrderHeader>
...
1 ответ
Запрос из MSDN включает в себя схему, поскольку он использует директиву XMLDATA.
Указывает, что должна быть возвращена встроенная схема XML-Data Reduced (XDR). Схема добавляется к документу в виде встроенной схемы. Рабочий пример см. В разделе "Использование режима RAW с FOR XML".
Если вы хотите включить пространство имен в явном режиме, вы должны добавить его самостоятельно и соответствующим образом назвать ваши элементы и атрибуты.
declare @T table
(
id int,
title varchar(50)
)
insert into @T values(451, 'Receptionist')
insert into @T values(1025, 'Secretary')
select 1 as Tag,
null as Parent,
'xx.yy.zz' as [root!1!xmlns:ns],
null as [ns:item!2!ns:id],
null as [ns:item!2!ns:title]
union all
select 2 as Tag,
1 as Parent,
null,
id,
title
from @T
for xml explicit
Результат:
<root xmlns:ns="xx.yy.zz">
<ns:item ns:id="451" ns:title="Receptionist" />
<ns:item ns:id="1025" ns:title="Secretary" />
</root>