次の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から変更することは、2、3日の余分な作業を行わずに行うオプションではありません。ドキュメント全体のトップレベルで明確にするためには、NSが必要であり、すべての子はNSを持っていない必要があります。