如何在sql server 2008中选择xmlnode和value

时间:2013-09-08 05:50:49

标签: sql-server xml sql-server-2008

我在表格

下面有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>

1 个答案:

答案 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>节点及其内容返回给您。