Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Распарсивание XML  [new]
wsnet
Member

Откуда:
Сообщений: 803
Коллеги, помогите, есть туча файлов xml, более 1000 файлов! со структурой типа:
<?xml version="1.0" encoding="UTF-8"?>
<Файл ИдФайл="VO_RRMSPSV_0000_9965_20171217_00c08324-f487-48d7-af43-9f8af62a0919" ВерсФорм="4.01" ТипИнф="&#x420;&#x415;&#x415;&#x421;&#x422;&#x420;&#x41C;&#x421;&#x41F;" КолДок="900">
<ИдОтпр><ФИООтв Фамилия="-" Имя="-"/></ИдОтпр>

<Документ ИдДок="9e30412d-a7f7-f3ab-d271-bee24351c012" ДатаСост="10.12.2017" ДатаВклМСП="10.09.2016" ВидСубМСП="2" КатСубМСП="1" ПризНовМСП="2">
<ИПВклМСП ИННФЛ="645116259532">
<ФИОИП Фамилия="&#x41A;&#x423;&#x412;&#x410;&#x41D;&#x426;&#x415;&#x412;&#x410;" Имя="&#x42E;&#x41B;&#x418;&#x42F;" Отчество="&#x421;&#x415;&#x420;&#x413;&#x415;&#x415;&#x412;&#x41D;&#x410;"/>
</ИПВклМСП>
<СведМН КодРегион="64"><Регион Тип="&#x41E;&#x411;&#x41B;&#x410;&#x421;&#x422;&#x42C;" Наим="&#x421;&#x410;&#x420;&#x410;&#x422;&#x41E;&#x412;&#x421;&#x41A;&#x410;&#x42F;"/>
<Город Тип="&#x413;&#x41E;&#x420;&#x41E;&#x414;" Наим="&#x421;&#x410;&#x420;&#x410;&#x422;&#x41E;&#x412;"/>
</СведМНСвОКВЭД>
<СвОКВЭДОсн КодОКВЭД="49.32" НаимОКВЭД="&#x414;&#x435;&#x44F;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x442;&#x430;&#x43A;&#x441;&#x438;" ВерсОКВЭД="2014"/>
<СвОКВЭДДоп КодОКВЭД="49.41" НаимОКВЭД="&#x414;&#x435;&#x44F;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x430;&#x432;&#x442;&#x43E;&#x43C;&#x43E;&#x431;&#x438;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x433;&#x440;&#x443;&#x437;&#x43E;&#x432;&#x43E;&#x433;&#x43E; &#x442;&#x440;&#x430;&#x43D;&#x441;&#x43F;&#x43E;&#x440;&#x442;&#x430;" ВерсОКВЭД="2014"/><СвОКВЭДДоп КодОКВЭД="49.42" НаимОКВЭД="&#x41F;&#x440;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x443;&#x441;&#x43B;&#x443;&#x433; &#x43F;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x432;&#x43E;&#x437;&#x43A;&#x430;&#x43C;" ВерсОКВЭД="2014"/></СвОКВЭД>
</Документ>


Есть структура этого безобразия по адресу https://www.nalog.ru/opendata/7707329152-rsmp/structure-08012016.xsd

Задача загрузить сие в базу данных, как можно быстрее и без тормозов, чем лучше воспользоваться?
11 янв 18, 15:01    [21097706]     Ответить | Цитировать Сообщить модератору
 Re: Распарсивание XML  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2468
даже версию Delphi не огласил..
ну ок
воспользуйся TXMLDocument
11 янв 18, 15:25    [21097855]     Ответить | Цитировать Сообщить модератору
 Re: Распарсивание XML  [new]
wsnet
Member

Откуда:
Сообщений: 803
Tactical Nuclear Penguin, сори Delphi 2010.
11 янв 18, 15:29    [21097897]     Ответить | Цитировать Сообщить модератору
 Re: Распарсивание XML  [new]
shalamyansky
Member

Откуда:
Сообщений: 15
Вы хотите, чтобы кто-то за вас и структуру базы создал по заданной в xsd схеме? Не знаю таких инструментов, хотя теоретически могли бы и быть, буду рад, если кто укажет. Но боюсь, структуру вам придется писать самому. Оно и надежнее. Обращаю только ваше внимание на атрибуты minOccurs="0" maxOccurs="unbounded", они очень важны для структуры, определяют, надо ли вводить отношения "один ко многим", или достаточно "один к одному".

Если структура создана, берете любой парсер, например MSXML или OmniXML, парсите и раскладываете по полочкам в базу. Эти два удобны, потому что поддерживают XPath, код будет много проще.
11 янв 18, 15:32    [21097919]     Ответить | Цитировать Сообщить модератору
 Re: Распарсивание XML  [new]
wsnet
Member

Откуда:
Сообщений: 803
shalamyansky
Вы хотите, чтобы кто-то за вас и структуру базы создал по заданной в xsd схеме? Не знаю таких инструментов, хотя теоретически могли бы и быть, буду рад, если кто укажет. Но боюсь, структуру вам придется писать самому. Оно и надежнее. Обращаю только ваше внимание на атрибуты minOccurs="0" maxOccurs="unbounded", они очень важны для структуры, определяют, надо ли вводить отношения "один ко многим", или достаточно "один к одному".

Если структура создана, берете любой парсер, например MSXML или OmniXML, парсите и раскладываете по полочкам в базу. Эти два удобны, потому что поддерживают XPath, код будет много проще.


Да нет структуру мне не нужно, ИМХО, а вот за инстументы поддерживающие Xpath спасибо!

Кстати, а где Вы увидели атрибуты minOccurs="0" maxOccurs="unbounded", что-то не видел?

Приведите выдержку.
11 янв 18, 15:47    [21098011]     Ответить | Цитировать Сообщить модератору
 Re: Распарсивание XML  [new]
shalamyansky
Member

Откуда:
Сообщений: 15
В xsd, на который вы дали ссылку. Например

<xs:element name="СвПрод" minOccurs="0" maxOccurs="unbounded">

означает, что элемент СвПрод в родительском элементе (у меня глаз не хватает посмотреть, кто там родитель) может встречаться неограниченное число раз, и может вообще ни разу. Для нас важно, что более одного раза. Это означает, что структура базы данных должна поддержать соотношение родитель-СвПрод "один ко многим". Что дает как минимум дополнительную таблицу.
11 янв 18, 15:56    [21098072]     Ответить | Цитировать Сообщить модератору
 Re: Распарсивание XML  [new]
shalamyansky
Member

Откуда:
Сообщений: 15
Это также означает, что при парсинге этого узла вы должны будете пользоваться функцией SelectNodes, а не SelectSingleMode. Причем в конкретных, взятых вами для примера XML-файлах, вхождение может быть и единичным, но на это ориентироваться нельзя, только на схему. Если, конечно, вы хотите правильно и без потерь провести импорт.
11 янв 18, 16:05    [21098124]     Ответить | Цитировать Сообщить модератору
 Re: Распарсивание XML  [new]
shalamyansky
Member

Откуда:
Сообщений: 15
SelectSingleNode, сорри.
11 янв 18, 16:07    [21098129]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить