Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.14;
Скачать: CL | DM;

Вниз

Загрузка xml с удаленного ресурса   Найти похожие ветки 

 
alsov ©   (2006-10-26 10:28) [0]

Приветствую, Мастера

Есть некий xml файл, который отдает http сервер.

Нужно сделать выборку из его и сформировать resultset.

Как получить из xml выборку я разобрался. Делаю так:

begin
 DECLARE @idoc int
 EXEC sp_xml_preparedocument @idoc OUTPUT, "
<?xml version="1.0" encoding="Windows-1251" ?>
<root>
 <tag value="Value1" date="2006-10-25" time="17:04:19" />
 <tag value="Value2" date="2006-10-25" time="17:04:19" />
 <tag value="Value3" date="2006-10-25" time="17:04:19" />
 <tag value="Value4" date="2006-10-25" time="17:04:19" />
 <tag value="Value5" date="2006-10-25" time="17:04:19" />
</root>"
 SELECT *
 FROM OPENXML (@idoc, "/root/tag",1)
         WITH (value  varchar(15),
               date varchar(20),
               time varchar(20)
               )

 EXEC sp_xml_removedocument @iDoc
end


Но как вместо строки запихнуть урл на xml ума не приложу.

Заранее спасибо за любую помощь


 
alsov ©   (2006-10-26 15:22) [1]

Все разобрался сам
Нашел процедуру

CREATE PROCEDURE LoadXMLFromFile
(
@tcFileNameVARCHAR(255),
@tcXMLStringVARCHAR(8000) OUTPUT
) AS
BEGIN
-- Scratch variables used in the script
DECLARE @retVal INT
DECLARE @oXML INT
DECLARE @errorSource VARCHAR(8000)
DECLARE @errorDescription VARCHAR(8000)
DECLARE @loadRetVal INT

-- Initialize the XML document
EXEC @retVal = sp_OACreate "MSXML2.DOMDocument", @oXML OUTPUT
IF (@retVal <> 0)
BEGIN
-- Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

-- Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

EXEC @retVal = sp_OASetProperty @oXML, "async", 0
IF @retVal <> 0
BEGIN
-- Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

-- Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

-- Load the XML into the document
EXEC @retVal = sp_OAMethod @oXML, "load", @loadRetVal OUTPUT, @tcFileName
IF (@retVal <> 0)
BEGIN
-- Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

-- Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

-- Get the loaded XML
EXEC @retVal = sp_OAMethod @oXML, "xml", @tcXMLString OUTPUT
IF (@retVal <> 0)
BEGIN
-- Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

-- Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

-- Release the reference to the COM object
EXEC sp_OADestroy @oXML

END


Все равно не решило проблемы. Но я думаю что решения её в mssql нет вообще.

Первая проблема (скорее самая важная) - невозможно из этого кода сделать вьюху(или функцию) и обращаться в xml как к таблице.
Вторая - проблема xml большого размера. Очень негативно влияет на производительность.



Страницы: 1 вся ветка

Текущий архив: 2007.01.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.079 c
4-1157101631
nikv
2006-09-01 13:07
2007.01.14
GetFileSize


15-1166685828
Jeer
2006-12-21 10:23
2007.01.14
Самолет так и не взлетел.


15-1166373226
Tolik
2006-12-17 19:33
2007.01.14
Защита структур и алгоритмов


2-1167060580
jjj
2006-12-25 18:29
2007.01.14
Вопрос по StringGrid`у


2-1166765004
Философ Огня
2006-12-22 08:23
2007.01.14
InterBase SQL. Узнать количество записей.