Замена префиксов пространства имен xml в SQL Server на XQuery - PullRequest
3 голосов
/ 11 мая 2009

У меня есть структура xml в существующей таблице базы данных SQL Server 2005 с определенным определенным пространством имен, мне нужно запросить 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?

1 Ответ

2 голосов
/ 08 декабря 2011

Если вы хотите заменить его пробелом

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