Хранение XML в SQL 2005 Проблема XMLNS - PullRequest
1 голос
/ 19 мая 2010

Я пытаюсь сохранить XML в SQL 2005. У меня очень простая таблица с Id и столбцом XML.

Когда XML содержит атрибут xmlns, мой поиск не работает.

Это мой XML;

insert into XMLTest (ItemXML) values ( 
'<MessageType>
    <ItemId id="ABC" xmlns="ss" />
    <Subject>sub</Subject>
</MessageType>
')

А это мой запрос;

select itemid, ItemXML.query('(/MessageType/ItemId)') from XMLTest order by ItemId desc

Если я изменю атрибут xmlns на что-то еще, мой запрос будет работать.

Не думаю, что знаю достаточно о XML, чтобы понять, что SQL делает с пространством имен. Но это должно быть обработка и хранение по-другому, может быть? У кого-нибудь была эта проблема?

1 Ответ

1 голос
/ 19 мая 2010

Если у вас есть пространство имен XML на вашем узле XML, вам нужно использовать это при запросах - что-то вроде этого - либо непосредственно в каждой * .query() или .value() функции локально, как это:

SELECT 
   itemid, 
   ItemXML.query('declare namespace x="ss";(/MessageType/x:ItemId)') 
FROM 
   XMLTest 
ORDER BY 
   ItemId DESC

(см. Здесь Электронная документация по SQL Server для получения более подробной информации об этом подходе) или, если вам нужно много ссылаться на это пространство имен XML, вы также можете определить его как область действия:

WITH XMLNAMESPACES('ss' as x)
SELECT 
   itemid, 
   ItemXML.query('(/MessageType/x:ItemId)') 
FROM 
   XMLTest 
ORDER BY 
   ItemId DESC

Подробнее о WITH XMLNAMESPACES в Электронная документация по MSDN SQL Server

...