2016-03-14 2 views
0

Я искал в Интернете, и нет хорошего примера для преобразования xml-файла в таблицу SQL Server.Как загрузить XML-файл в таблицу SQL Server

У меня есть этот файл:

<http://www.ims.gov.il/ims/PublicXML/isr_cities.xml> 

Это файл погоды в 15 городах (в течение следующих 4-х дней).

Как загрузить его на плоский стол в SQL Server?

Я стараюсь, и он просто дайте мне :-(Null в

я потушить некоторое значение, принявшие проблемы, но до сих пор я не могу превратить его в большой плоский стол.

Как я могу потушить все узлы внутри файла XML

Благодаря

+0

Возникает проблема с извлечением этого файла из URL-адреса или у вас уже загружен этот контент, и вы хотите читать значения оттуда? – Shnugo

+0

Вы не можете просто создать * плоский стол * из таких данных. Это очень вложен ... – Shnugo

+0

И один последний комментарий: ваш вопрос - как вы его поместили - действительно вводит в заблуждение, попробуйте подумать с головой пользователя SO. Из заголовка вы хотите * загрузить файл в виде таблицы *. В этом вопросе есть * URL-адрес источника файла *. Реальный вопрос: * Как прочитать XML-файл из файловой системы? * Или это было * Как получить значения из этого XML, которые у меня есть? * В любом случае: Счастливое кодирование и [прочитайте это: someone-answer] (http: //stackoverflow.com/help/someone-answers) – Shnugo

ответ

1

вы можете попробовать что-то вроде этого (предполагая, что у вас есть XML в переменной SQL Server под названием @input XML):?!

SELECT 
    LocationId = XC2.value('(LocationId)[1]', 'int'), 
    LocNameEng = XC2.value('(LocationNameEng)[1]', 'varchar(100)'), 
    TheDate = XCE.value('(../Date)[1]', 'DATE'), 
    ElementName = XCE.value('(ElementName)[1]', 'varchar(50)'), 
    ElementValue = XCE.value('(ElementValue)[1]', 'varchar(50)') 
FROM 
    @input.nodes('/IsraelCitiesWeatherForecastEvening/Location') AS XT(XC) 
CROSS APPLY 
    XC.nodes('LocationMetaData') AS XT2(XC2) 
CROSS APPLY 
    XC.nodes('LocationData/TimeUnitData/Element') AS XTE(XCE) 

Это должно дать вам как минимум выход и может служить отправной точкой для дальнейшего исследования!

1

Я думаю, что это может быть то, что вы хотите. После разговора вы можете сделать с XML, что вы хотите ...

--you need to allow this: 
sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE; 
GO 
sp_configure 'Ole Automation Procedures', 1; 
GO 
RECONFIGURE; 
GO 

DECLARE @URL VARCHAR(MAX) = 'http://www.ims.gov.il/ims/PublicXML/isr_cities.xml'; 

DECLARE @xmlT TABLE (yourXML XML); 
DECLARE @Response NVARCHAR(MAX); 
DECLARE @XML XML; 
DECLARE @Obj INT; 
DECLARE @Result INT; 
DECLARE @HTTPStatus INT; 
DECLARE @ErrorMsg NVARCHAR(MAX); 

EXEC @Result = sp_OACreate 'MSXML2.XMLHttp', @Obj OUT ; 
EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false; 
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded'; 
EXEC @Result = sp_OAMethod @Obj, SEND, NULL, ''; 
EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT ; 

INSERT @xmlT (yourXML) 
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'; 

SELECT * FROM @xmlT; 
0

Я должен нужен узел элемента, но начало я сделал что-то вроде этого:

DECLARE @WeatherXML xml 
SET @WeatherXML = ( SELECT * FROM  
     OPENROWSET (BULK 'C:\Stam\isr_citiesNEW.xml', SINGLE_BLOB) AS FileImport (XMLDATA)) 

-- insert xml to [MOT_Temp_WeatherXML] table 
INSERT INTO [dbo].[MOT_Temp_WeatherXML] 
      ([LocationId] 
      ,[LocationNameEng] 
      ,[LocationNameHeb] 
      ,[DisplayLat] 
      ,[DisplayLon] 
      )SELECT 
        wXML.query('LocationId').value('.','NVARCHAR(30)'), 
        wXML.query('LocationNameEng').value('.','NVARCHAR(30)'), 
        wXML.query('LocationNameHeb').value('.','NVARCHAR(30)'), 
        wXML.query('DisplayLat').value('.','NVARCHAR(30)'), 
        wXML.query('DisplayLon').value('.','NVARCHAR(30)') 
      FROM @WeatherXML.nodes('/IsraelCitiesWeatherForecastMorning/Location/LocationMetaData') AS XmlData(wXML) 

SELECT * FROM [MOT_Temp_WeatherXML] 

после этого я получаю в результатах:

<LocationId>520</LocationId> 

и так далее ... вместо того, чтобы просто 520 ...

, но опять же, если я получаю элемент узел я буду счастлив ...

+0

Привет, Шарон, поскольку вы новичок в SO, пожалуйста, дайте мне несколько советов: Ответы * только *, чтобы предложить решение вопроса наверху. Если вы хотите улучшить свой вопрос, добавьте больше деталей, очистите его, просто используйте параметр редактирования под вопросом и сделайте это там. – Shnugo

+0

спасибо вам много! – sharon

+0

Привет, Шарон, очень любезно с вашей стороны сказать «спасибо», но было бы еще добрее [прочитать это: кто-то-ответы] (http://stackoverflow.com/help/someone-answers) Thx! – Shnugo

1

проблема была в моей местной обстановке ...

здесь в любом случае мой код после улучшения. Я все еще работаю над этим ... благодарю всех вас!

DECLARE @WeatherXML xml 
SET @WeatherXML = ( SELECT *  FROM  
      OPENROWSET (BULK 'C:\Stam\isr_cities.xml', SINGLE_BLOB) AS FileImport (XMLDATA)) 
SELECT 
     wXML.query('../../../LocationMetaData/LocationId').value('.','NVARCHAR(30)'), 
     wXML.query('../../../LocationMetaData/LocationNameEng').value('.','NVARCHAR(30)'), 
     wXML.query('../../../LocationMetaData/LocationNameHeb').value('.','NVARCHAR(30)'), 
     wXML.query('../../../LocationMetaData/DisplayLat').value('.','NVARCHAR(30)'), 
     wXML.query('../../../LocationMetaData/DisplayLon').value('.','NVARCHAR(30)'), 
     wXML.query('../Date').value('.','NVARCHAR(30)'), 
     wXML.query('ElementName').value('.','NVARCHAR(30)'), 
     wXML.query('ElementValue').value('.','NVARCHAR(30)') 
FROM @WeatherXML.nodes('/IsraelCitiesWeatherForecastMorning/Location/LocationData/TimeUnitData/Element') AS XmlData(wXML) 
+1

Привет, Шарон, еще раз некоторые подсказки ... Добавление ответа и письмо «спасибо всем вам» приятно, но SO-пользователи не найдут этого (если только они не переместят * свои * ответы, чтобы проверить, что-то новое. Скорее поставьте комментарий ниже ответа пользователя и добавьте имя пользователя с помощью * at * (например, '@ Shnugo'). Это приведет к уведомлению. Btw: способ, которым читается XML, кажется, что лучше читать @marc_s. Ваш' .query() .value() 'можно улучшить ... – Shnugo

Смежные вопросы