Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перенести данные из xml файла в базу данных, данные из xml файла в базу данных  
:(
    Опции темы
Mirapurr
Дата 26.11.2019, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.11.2019

Репутация: нет
Всего: нет



Здравствуйте, мне нужно перенести данные из xml файла в таблицу базы данных. Структура xml файла такая:
Код

-<licenses_list>
-<licenses>
<name>Имя</name>
<activity_type>Деятельность</activity_type>
<full_name_licensee>Длинное имя</full_name_licensee>
<address>Адрес</address>
 
-<work_address_list>
-<address_place>
<address>Другой адрес</address>
<index>Индекс</index>
<region>Регион</region>
<city>Город</city>
 
-<works>
<work>Услуги 1</work>
<work>Услуги 2</work>
</works>
</address_place>
-<address_place>
<address>Другой адрес</address>
<index>Индекс</index>
<region>Регион</region>
<city>Город</city>
 
-<works>
<work>Услуги 1</work>
<work>Услуги 2</work>
</works>
</address_place>
 

-</licenses>
-</licenses_list>

Я создала таблицу с такими полями. И использовала вот такой скрипт
Код

DECLARE @S VARCHAR(MAX);
DECLARE @xml xml;
SELECT @xml = 
CONVERT(xml, BulkColumn, 2) 
FROM OPENROWSET(BULK 'адрес.xml', SINGLE_BLOB) AS x
SET @S = '<?xml version="1.0" encoding="windows-1251"?>' + CONVERT(VARCHAR(MAX),@xml)
 
DECLARE @idoc INT
EXEC sp_xml_preparedocument @idoc OUTPUT, @S
 
TRUNCATE TABLE [dbo].[test1]
INSERT INTO [dbo].[test1]
    ([name]
      ,[activity_type]
      ,[full_name_licensee]
      ,[address]
      ,[INDEX]
      ,[region]
      ,[city]
      ,[WORK]
SELECT
     CASE 
       WHEN name = '' THEN NULL
       ELSE name
     END name
      ,CASE 
       WHEN activity_type = '' THEN NULL
       ELSE activity_type
     END activity_type
      ,CASE 
       WHEN full_name_licensee = '' THEN NULL
       ELSE full_name_licensee
     END full_name_licensee
 ,CASE 
       WHEN address = '' THEN NULL
       ELSE address
     END address
,CASE 
       WHEN [INDEX] = '' THEN NULL
       ELSE [INDEX]
     END [INDEX]
      ,CASE 
       WHEN region = '' THEN NULL
       ELSE region
     END region
     ,CASE 
       WHEN city = '' THEN NULL
       ELSE city
     END city
,CASE 
       WHEN [WORK] = '' THEN NULL
       ELSE [WORK]
     END [WORK]
FROM OPENXML (@idoc,'/licenses_list/licenses')
WITH ([name] [VARCHAR](128) 'name',
    [activity_type] [VARCHAR](128) 'activity_type',
    [full_name_licensee] [VARCHAR](254) 'full_name_licensee',
[address] [VARCHAR](254) 'address',
    [INDEX] [INT] 'index',
    [region] [VARCHAR](128) 'region',
    [city] [VARCHAR](128) 'city',
    [WORK] [VARCHAR](254) 'work'

Таким образом к сожалению в таблицу заполняются только данные до тега <work_address_list>
Мне нужно, чтобы все строки таблицы были заполнены. А так получается, что строки с тегом <work> не заполняются.
Делала разными селектами, но тогда появлялись отдельные записи, где везде пустые значения и только поле work заполнено. А нужно чтобы как то связывались поля. и имя выходило (и остальные данные) для каждого work
Постаралась объяснить понятно, надеюсь вы мне подскажете

Я пробовала в режиме разработчика в excel перевести файл, а потом загружать из excel в бд. Но такой способ подходит только для небольших файлов. Мне же нужно, чтобы работало с большим объемом данных.
PM MAIL   Вверх
diadiavova
Дата 26.11.2019, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Mirapurr, вообще вопрос как бы не совсем по хмл, скорее по базам данных или инструментам мэппинга данных. Если вопрос именно об инструментах, то вот, например есть у альтовы такой
Data Mapping Tools: Mapforce | Altova
Если интересуют бесплатные, то можно поискать так
data mapping tools free - Поиск в Google
Если вопрос в том, как это сделать посредством SQL, то видимо надо спрашивать в разделе, посвященном той DB-платформе, с которой работаешь. Ну, а если речь о программном решении, то в разделе соответствующего языка программирования.
Чисто XML-решением можно было бы назвать решение, в котором используемая СУБД умеет импортировать данные из хмл, но требуется другой формат хмл, в этом случае можно было трансформировать исходный файл с помощью XSLT или XQuery.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.1133 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.