考虑以下 SQL:
;WITH XMLNAMESPACES(DEFAULT 'http://www.mynamespace.co.uk')
,CTE_DummyData AS (
select id=1
)
select TOP 1
[@ID]=1,
(select top 1 [@ID] = 1 FROM CTE_DummyData FOR XML PATH ('Child'), TYPE)
from CTE_DummyData
FOR XML PATH ('Parent')
Thie 返回 xml:
<Parent xmlns="http://www.mynamespace.co.uk" ID="1">
<Child xmlns="http://www.mynamespace.co.uk" ID="1" />
</Parent>
我需要的是仅在根元素上返回带有 xmlns 声明的 xml。例如:
<Parent xmlns="http://www.mynamespace.co.uk" ID="1">
<Child ID="1" />
</Parent>
有办法做到这一点吗?
注意: 上面的 SQL 是实际代码的极端简化,它会生成一个复杂的文档,因此如果不给我几天的额外工作要做,从 FOR XML PATH 进行更改并不是一个真正的选择。需要明确的是,整个文档的顶层都需要有 NS,而所有子级都应该没有。
最佳答案
您可以使用"query from hell"
;with CTE_DummyData AS (
select id=1
)
select 1 as tag,
0 as parent,
'http://www.mynamespace.co.uk' as [Parent!1!xmlns],
id as [Parent!1!ID],
null as [Child!2!ID]
from CTE_DummyData
union all
select top 1
2,
1,
null,
null,
id
from CTE_DummyData
for xml explicit
关于xml - 带有 FOR XML PATH 的默认命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7751631/