在SQL Server 2012中从XML中提取元素名称

时间:2014-07-10 21:10:38

标签: sql-server xml

我有一个像这样的xml文档:

  <root>
     <e1>
       <l2>
       ..
       </l2>
     </e1>
     <e2>
      ...
     </e2>
     ...
    </root>

我想提取元素的直接子元素列表中只有元素标记名称,例如对于root我只想获取e1,而e2(只是标记(元素)名称不是整个元素)和e1我想再次获得l2标记名

是否可以在SQL Server 2012中执行此操作?

1 个答案:

答案 0 :(得分:4)

这样的东西?

DECLARE @input XML = '<root>
     <e1>
       <l2>
         <data1>test</data1>
       </l2>
       <l3>
         <data3>test3</data3>
       </l3>
     </e1>
     <e2>
        <data1>test</data1>
        <data2>test2</data2>
     </e2>
    </root>'

要获取<root>下的直接后代节点,您可以使用此查询:

SELECT
    XC.value('local-name(.)', 'varchar(20)')
FROM 
    @input.nodes('/root/*') AS XT(XC)

返回:

e1
e2

此查询获取<e2>的后代:

SELECT
    XC.value('local-name(.)', 'varchar(20)')
FROM 
    @input.nodes('/root/e2/*') AS XT(XC)

返回:

data1
data2