我在表格
下面有xml<GetOrdersResponse xmlns="urn:ebay:apis:eBLBaseComponents">
<Timestamp>2013-09-07T06:38:46.192Z</Timestamp>
<Ack>Success</Ack>
<Version>837</Version>
<Build>E837_CORE_APIXO_16317239_R1</Build>
<HasMoreOrders>true</HasMoreOrders>
<OrdersPerPage>100</OrdersPerPage>
<PageNumber>1</PageNumber>
<ReturnedOrderCountActual>48</ReturnedOrderCountActual>
<PaginationResult>
<TotalNumberOfPages>9</TotalNumberOfPages>
<TotalNumberOfEntries>881</TotalNumberOfEntries>
</PaginationResult>
<OrderArray>
<Order>
<OrderID>1</OrderID>
</Order>
<Order>
<OrderID>2</OrderID>
</Order>
</OrderArray>
</GetOrdersResponse>
我写了下面的查询并获得了2行balank(非null)结果
select xmlresponse.value('(/GetOrdersResponse/OrderArray)[1]','varchar(max)')
from ordersxml
我想结果如下
Row1: <Order>
<OrderID>1</OrderID>
</Order>
Row2: <Order>
<OrderID>2</OrderID>
</Order>
答案 0 :(得分:1)
您忽略 XML文档中定义的XML命名空间!
<GetOrdersResponse xmlns="urn:ebay:apis:eBLBaseComponents">
***************************************
您需要在查询中使用它 - 如下所示:
;WITH XMLNAMESPACES(DEFAULT 'urn:ebay:apis:eBLBaseComponents')
SELECT
XOrder.query('.')
FROM
dbo.YourTableInQuestionHere
CROSS APPLY
XMLDATA.nodes('/GetOrdersResponse/OrderArray/Order') AS XTbl(XOrder)
这会将两个<Order>
节点及其内容返回给您。