2012-01-25 31 views
2

誰能告訴我,我怎麼會從下面的XML中選擇值: 我想獲得列如下: Col1中:鍵,col2的:關鍵,COL3:值如何在t-sql中讀取xml?

1 1 value 
1 2 value2 
1 3 value3 

2 4 value4 
2 5 value5 
2 6 value6 

這裏是XML:

<root> 
    <item> 
    <key>1</key> 
    <value> 
     <params> 
     <item> 
      <key>1</key> 
      <value>value</value>  
     </item> 
     <item> 
      <key>2</key> 
      <value>value2</value>  
     </item>  
     <item> 
      <key>3</key> 
      <value>value3</value>  
     </item>  
     </params> 
    </value> 
    </item> 
    <item> 
    <key>2</key> 
    <value> 
     <params> 
     <item> 
      <key>4</key> 
      <value>value4</value>  
     </item> 
     <item> 
      <key>5</key> 
      <value>value5</value>  
     </item>  
     <item> 
      <key>6</key> 
      <value>value6</value>  
     </item>  
     </params> 
    </value> 
    </item> 
</root> 

回答

8

假設你有這樣的XML在T-SQL變量 - 那麼你可以使用這個代碼片段:

DECLARE @input XML = '...(your XML here).....' 

SELECT 
    Key1 = Item.value('(key)[1]', 'int'), 
    Key2 = Item2.value('(key)[1]', 'int'), 
    ItemValue = Item2.value('(value)[1]', 'varchar(50)') 
FROM 
    @input.nodes('/root/item') AS T(Item) 
CROSS APPLY 
    item.nodes('value/params/item') AS T2(Item2) 

這讓我的輸出:

Key1 Key2 ItemValue 
1  1  value 
1  2  value2 
1  3  value3 
2  4  value4 
2  5  value5 
2  6  value6 

的方法如下:

  • <item>節點<root>作爲第一個「XML節點列表」下的列表與第一.nodes()的XQuery方法,並將該XML片段中的XML元素的<key>的值提取爲Key1

  • 獲取該XML片段中的「嵌套」XML節點列表,u唱value/params/item的XPath,來獲取子行 - 以及從這些嵌套的子XML片段<key><value>提取值到Key2ItemValue

+0

酷這就是我一直在尋找。我認爲,不知怎的,我將不得不枚舉兩次從特定的葉子,但不知道我可以使用'項目'從第一個節點。再次感謝! – John