如何忽略根节点和子节点的xml命名空间,并在SQL中使用逗号分隔值从xml查询值

时间:2017-04-17 14:22:14

标签: sql xml-namespaces

我在表格中输入了一个xml'测试'如下

Id     Input
------------------------------------------------------
1      <DeviceList xmlns="www.domain.com/devicelist">
         <Device xmlns="" Name="Device1">1</Device>
         <Device xmlns="" Name="Device2">2</Device>
       </DeviceList>

2      <DeviceList xmlns="www.domain.com/devicelist">
         <Device xmlns="" Name="Device3">3</Device>
         <Device xmlns="" Name="Device4">4</Device>
       </DeviceList>

3      <DeviceList>
         <Device>4</Device>
         <Device>5</Device>
       </DeviceList>

我的预期结果如下,

Id   DeviceIds
--------------
1    1,2
2    3,4
3    4,5

我的查询,

SELECT Id, 
STUFF((SELECT 
', ' + CAST(Id.query('./text()') as VARCHAR(MAX)) FROM Input.nodes('/DeviceList/Device') AS Projectors(Id) FOR XML PATH('')), 1, 1, '') AS DeviceIds
FROM test;

但是,此查询返回结果,

Id  DeviceIds
-------------
1   NULL
2   NULL
3   4,5

任何人都可以帮助/建议我。

1 个答案:

答案 0 :(得分:0)

根据以下问题判断query XML while ignoring namespace?

看起来像/ *:标记名可能有帮助。

如果这不起作用,这个问题还提供了围绕Ignore XML namespace in T-SQL

的另一项工作

但是在命名空间之前需要一些知识。