Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Курсы ČNB, xml  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 774
Добрый день, коллеги.

На каждом новом месте приходится решать одну и ту же задачу - курсы нацбанка. Я решил, что нужно уже в конце концов написать процедурку на основе официального XML, чтобы не изобретать веломотоавтоэкстрактор каждый раз.

+ извлечение с официального сайта

      declare @tcFileName             VARCHAR(4000)='http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.xml?date=1.8.2017'    
      declare @xml_output             xml 
      
      DECLARE @Obj int 
      DECLARE @Result int 
      DECLARE @HTTPStatus int 

      EXEC @Result = sp_OACreate 'MSXML2.XMLHttp', @Obj OUT 
      EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @tcFileName, false
      EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Content-Type', 'XML'
      EXEC @Result = sp_OAMethod @Obj, send, NULL, ''
      EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT 

      declare @Tab table (x xml)

      insert into @tab
      EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'-- ,@XML output

      select * from @Tab
--    set @xml_output=(Select x from @tab)


Но моё конг-фу с XML не самое сильное конг-фу в мире, что-то пОшло не так

Ни так
      set @xml_output=(Select x from @tab)
      
select 
	Tbl.Col.value ('kod[1]','nvarchar(3)') kod
	,Tbl.Col.value ('mnozstvi[1]','int') mnozstvi
	,Tbl.Col.value('kurz[1]','decimal(10,3)') kurz
 from @xml_output.nodes('kurzy/tabulka/radek') Tbl(Col)

Ни так
EXEC sp_xml_preparedocument @Result OUTPUT, @xml_output; 

SELECT *
FROM 
OPENXML (@Result, 'kurzy/tabulka/radek', 3) 
 WITH (
	kod nvarchar(3) 'kurzy/tabulka/radek/kod', 
	mnozstvi int 'kurzy/tabulka/radek/mnozstvi',
	kurz int 'kurzy/tabulka/radek/kurz')


Ничего не видно, помогите Христа ради, люди добрые.
1 авг 17, 17:02    [20692468]     Ответить | Цитировать Сообщить модератору
 Re: Курсы ČNB, xml  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
Шыфл
что-то пОшло не так
Потому что для вас что элемент, что атрибут - все едино...
select 
	Tbl.Col.value ('@kod','nvarchar(3)') kod
	,Tbl.Col.value ('@mnozstvi','int') mnozstvi
	,Tbl.Col.value('@kurz','decimal(10,3)') kurz
 from @xml_output.nodes('kurzy/tabulka/radek') Tbl(Col)


ЗЫ: Ошибки приведения типов исправляйте самостоятельно.
1 авг 17, 17:26    [20692535]     Ответить | Цитировать Сообщить модератору
 Re: Курсы ČNB, xml  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 774
invm,

Спасибо! Изваяю в граните и буду показывать работодателям уже на стадии собеседования.
1 авг 17, 17:51    [20692594]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить