Supponendo che tu abbia questo XML in una variabile T-SQL, puoi usare questo frammento di codice:
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)
Questo mi dà un output di:
Key1 Key2 ItemValue
1 1 value
1 2 value2
1 3 value3
2 4 value4
2 5 value5
2 6 value6
L'approccio è il seguente:
-
prendi l'elenco di
<item>
nodi in<root>
come primo "elenco di nodi XML" con il primo.nodes()
XQuery ed estrarre il valore di<key>
Elemento XML in quel frammento XML inKey1
-
prendi l'elenco "nidificato" di nodi XML all'interno di quel frammento XML, usando il
value/params/item
XPath, per ottenere le righe figlie ed estrarre i valori da<key>
e<value>
da quei frammenti XML figlio nidificati inKey2
eItemValue