Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Hel975 Member Откуда: Москва Сообщений: 1052 |
Есть xml, который надо загрузить в БД, но проблема в том, что ноды написаны с использованием префиксов. Не понятно, как правильно написать синтаксис для такого случая, поиск не помог. Пишу так: DECLARE @BasketXml NVARCHAR(MAX) DECLARE @BasketPointer INT SET @BasketXml = '<?xml version="1.0" ?> <tns:basket xmlns:tns="http://mds.nyxdata.com/vrxml/2009/1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mds.nyxdata.com/vrxml/2009/1.2 http://mds.nyxdata.com/vrxml/2009/1.2/VRXML_1.2_beta.xsd" tns:customerId="12345"> <tns:item tns:productId="a123" quantity="1"/> <tns:item tns:productId="b456" quantity="3"/> <tns:item tns:productId="c789" quantity="2"/> </tns:basket>' EXEC sp_xml_preparedocument @BasketPointer OUTPUT, @BasketXml DECLARE @BasicBasket TABLE ( ProductId NVARCHAR(20), Quantity INT ) INSERT @BasicBasket SELECT productId ProductId, quantity Quantity FROM OPENXML (@BasketPointer, '/tns:basket/tns:item', 1) WITH (productId NVARCHAR(20), quantity INT) EXEC sp_xml_removedocument @BasketPointer SELECT * FROM @BasicBasket Выдается ошибка: XML parsing error: Reference to undeclared namespace prefix: 'tns'. Не понятно, где корректно указать префикс для неймспейса. |
4 июл 13, 17:45 [14523906] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
> поиск не помог. собственно, достаточно открыть в документации статью по sp_xml_preparedocument. http://msdn.microsoft.com/en-us/library/ms187367.aspx DECLARE @BasketXml NVARCHAR(MAX) DECLARE @BasketPointer INT SET @BasketXml = '<?xml version="1.0" ?> <tns:basket xmlns:tns="http://mds.nyxdata.com/vrxml/2009/1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mds.nyxdata.com/vrxml/2009/1.2 http://mds.nyxdata.com/vrxml/2009/1.2/VRXML_1.2_beta.xsd" tns:customerId="12345"> <tns:item tns:productId="a123" quantity="1"/> <tns:item tns:productId="b456" quantity="3"/> <tns:item tns:productId="c789" quantity="2"/> </tns:basket>' declare @ns nvarchar(max) set @ns = '<root xmlns:tns="http://mds.nyxdata.com/vrxml/2009/1.2"/>' EXEC sp_xml_preparedocument @BasketPointer OUTPUT, @BasketXml, @ns DECLARE @BasicBasket TABLE ( ProductId NVARCHAR(20), Quantity INT ) INSERT @BasicBasket SELECT [tns:productId] ProductId, quantity Quantity FROM OPENXML (@BasketPointer, '/tns:basket/tns:item', 1) WITH ([tns:productId] NVARCHAR(20), quantity INT) EXEC sp_xml_removedocument @BasketPointer SELECT * FROM @BasicBasket |
4 июл 13, 17:56 [14523964] Ответить | Цитировать Сообщить модератору |
Hel975 Member Откуда: Москва Сообщений: 1052 |
daw, Спасибо |
5 июл 13, 10:49 [14526060] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |