Если у вас есть этот 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-элемента <key>
в этом фрагменте XML в Key1
захватить «вложенный» список узлов XML внутри этого фрагмента XML, используя value/params/item
XPath, чтобыполучить дочерние строки - и извлечь значения из <key>
и <value>
из этих вложенных дочерних XML-фрагментов в Key2
и ItemValue