我在现有的SQL Server 2005数据库表中有一个xml结构,并且定义了特定的命名空间,我需要查询XML并在此过程中,更改命名空间前缀以成为默认命名空间。旧的xml在根节点和子节点上定义了命名空间,我知道如何轻松地替换root,但不知道子节点的命名空间。
当前数据:
<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合并名称空间?
答案 0 :(得分:2)
update tbl_Archive set XML.modify('delete /*:Document/*:Volume[text()]/@xmlns:sg')