考虑下面的SQL默认命名空间:与FOR XML PATH
;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,并且所有的孩子都应该没有。
我找不到方法,但他们应该有相同的含义 - 为什么你不能使用第一种形式? –
@Damien:这是数据迁移过程的一部分。虽然第一个文档意味着相同(如您所说),但当我们将其传递到(第三方)导入Web服务时,它不起作用。我认为问题在于它使用了子查询。如果您使用单个查询并使用'[Child/@ ID]'定义Child元素,那么它可以正常工作,但这需要对代码进行一些重新思考(我已继承) –