2016-09-25 8 views
1

SQL Server 2008の一部のXMLに対してクエリを実行しようとしていますが、結果が表示されません。私はいくつかのオンライン調査を行い、次のクエリを考え出しました。私は周りに遊んでルートノードを返すことができましたが、私は内部から値を必要とし、コールノードの配列があり、そこから値が必要です。ノード配列のxpath

WITH XMLNAMESPACES ('http://api.myapi.com/resource' as r) 
select c.value('@AgentCall','varchar(max)') as value 
from mytable cl 
outer apply cl.callinfoxml.nodes('//Call') as q(c) 

サンプルXML:

<r:ResourceList xmlns:r="http://api.myapi.com/resource" xmlns="http://api.myapi.com/data" totalResults="1"> 
    <Call id="1123570170003"> 
     <FromNumber>14062618272</FromNumber> 
     <ToNumber>14062618272</ToNumber> 
     <State>READY</State> 
     <BatchId>12827094003</BatchId> 
     <BroadcastId>14633834003</BroadcastId> 
     <ContactId>818582749003</ContactId> 
     <Inbound>false</Inbound> 
     <Created>2016-09-22T06:22:18Z</Created> 
     <Modified>2016-09-22T06:22:18Z</Modified> 
     <AgentCall>false</AgentCall> 
    </Call> 
</r:ResourceList> 

答えて

1

あなたの文書にデフォルトのXML名前空間に注意を払っていない - あなたにもあることを参照する必要があります。このコードを試してみてください:

WITH XMLNAMESPACES (DEFAULT 'http://api.myapi.com/data', 
          'http://api.myapi.com/resource' as r) 
SELECT 
    c.value('@AgentCall', 'varchar(max)') AS value 
FROM 
    mytable cl 
OUTER APPLY 
    cl.callinfoxml.nodes('/r:ResourceList/Call') as q(c) 
+0

ありがとうございます。これは、選択値を 'c.value( '(AgentCall)[1]'、 'varchar(max)')AS value' – Silas