使用XQuery替换SQL Server中的xml命名空间前缀

时间:2009-05-11 00:19:07

标签: sql sql-server database sql-server-2005 xquery

我在现有的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合并名称空间?

1 个答案:

答案 0 :(得分:2)

如果您想用空格

替换它
update tbl_Archive set XML.modify('delete /*:Document/*:Volume[text()]/@xmlns:sg')