如何获取XML节点中的XML属性列表

时间:2016-09-16 13:23:24

标签: sql-server xml

我有一个场景,我在sql表中获得的XML数据可以包含与特定元素相关的动态属性列表。例如,XML可以是

<XML><row ID = 1 x1="x1value" x2 = "x2value" /></XML>
<XML><row ID = 10 X3 = "x3value" x10 = "x10value" /></XML>
<XML><row ID = 5 x1="x1value2" x10 = "x10value2" /></XML>

我必须单独处理每个XML数据,并使用MSSQL查询(如键值对)动态切碎并获取每个属性的值到临时表中或将其展平为关系模型,如

SELECT x1, x2 INTO #temp FROM xml...

如果您了解XML中存在的属性,我研究的所有示例都会显示提取方式。在我的例子中,我不知道元素中存在哪些属性。

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:2)

试试这个,

DECLARE @XML as xml

SET @XML = '<XML><row ID="1" x1="x1value" x2="x2value" /></XML>'

SELECT 
    k.value('@ID','BIGINT') AS ID,
    b.value('local-name(.)','VARCHAR(50)') AS ColumnName,  -- get attribute name
    b.value('.','VARCHAR(MAX)') AS Value  -- get attribute value
FROM @XML.nodes('/XML/row') p(k)
CROSS APPLY k.nodes('@*') a(b)

输出:

ID  ColumnName   Value    
--- ------------ -----------
1   ID           1
1   x1           x1value
1   x2           x2value

希望这有帮助