我在现有的 SQL Server 2005 数据库表中有一个定义了特定命名空间的 xml 结构,我需要查询 XML 并在此过程中将命名空间前缀更改为默认命名空间。旧 xml 在根节点和子节点上定义了命名空间,我知道如何轻松替换根,但不知道子节点的命名空间。
当前数据:
<sg:Settings xmlns:sg="uri:mynamespace">
<sg:SomeData xmlns:sg="uri:mynamespace"/>
</sg:Settings>
使用 SQL:
WITH XMLNAMESPACES
('uri:mynamespace' as sg)
SELECT
settingsNode.query('<Settings xmlns="uri:mynamespace"> { sg:SomeData } </Settings> ')
FROM
SettingsTable CROSS APPLY
SettingsXml.nodes('/sg:Settings') T(settingsNode)
我可以得到以下信息:
<Settings xmlns="uri:mynamespace">
<sg:SomeData xmlns:sg="uri:mynamespace"/>
</Settings>
但我试图得到这个:
<Settings xmlns="uri:mynamespace">
<SomeData/>
</Settings>
有没有办法使用 SQL XQuery 合并命名空间?