使用未知架构粉碎XML

时间:2013-09-23 18:43:46

标签: sql-server xml openxml

我必须将带有未知模式的XML碎化到表中。我不知道XML中有哪些元素。我也不了解XML格式。在某些情况下,XML数据是以属性为中心的,在某些情况下,它是以元素为中心的。

例如 - 我有两个XML -

<Root>
   <Recorset>
       <RecordsetId>1</RecordsetId>
       <RecordsetName>name1</RecordsetName>
  </Recorset>
</Root>

<Root>
     <Recorset RecordsetId="2" RecordsetName="name2"></Recorset>
</Root>

XML可以包含任何其他元素/属性。我需要使用OPENXML生成的EDGE表捕获元素/属性名称和相应数据。

这样做最简单的方法是什么?

我需要以给定格式输出 -

RecodrsetId   RecordsetName
1             Name1
2             Name2

1 个答案:

答案 0 :(得分:3)

这样的事情?

select
    C.Name,
    C.Value
from @Data.nodes('//*') as T(C)
    outer apply (
        select
            T.C.value('local-name(.)', 'nvarchar(max)') as Name,
            T.C.value('(./text())[1]', 'nvarchar(max)') as Value
        union all
        select
            A.C.value('local-name(.)', 'nvarchar(max)') as Name,
            A.C.value('.', 'nvarchar(max)') as Value
        from T.C.nodes('@*') as A(C)
    ) as C
where C.Value is not null

<强> sql fiddle demo