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

7
我有一个情景,其中我在 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个回答

13

请尝试这个:

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

希望这有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接