Ed
Вот такой xml:
<main>
<Данные>
<ДатаНачала>22.03.2011</ДатаНачала>
<Назначение>Торговля</Назначение>
<Комментарии/>
<ДатаОкончания>22.03.2011</ДатаОкончания>
</Данные>
<какой-то другой тэг>
<Данные>
<Что-то>содержимое чего-то</Что-то>
</Данные>
</какой-то другой тэг>
</main>
Реален? Или все-таки тэг ‘Данные’ всегда содержит тэги ‘ДатаНачала’, ‘Назначение’, ‘Комментарии’ и ‘ДатаОкончания’?
Нет. <Данные> может содержать определенный набор тегов, в каком то из тегов <Данные> могут быть все его теги, а в каком то только один из всего набора (это значит, что отсутствующие теги не содержат никакой информации, поэтому они отсутствуют)
Ed
Может ли встречаться тэг ‘Данные’ на разных уровнях?
Нет.
Ed
Содержимое тегов внутри тэга ‘Данные’ складывается в одну и ту же таблицу в базу или в разные в зависимости от уровня, на котором находится тэг ‘Данные’?
Вложенные в <Данные> теги идут в разные таблици одной базы в зависимости от вложенности.
Содержимое тегов “Данные” и “Отчеты”, а также “Документы” могут отправляться в разные таблицы, но в одну бд.
Ed
Нарисуйте мне, пожалуйста, пример вашего многоуровневого xml с разными комбинациями тэгов и напишите какие тэги в какие таблицы и поля складывать. Я вам за это нарисую прототипчик, который будет его в один проход обрабатывать.
XML:
<?xml version=“1.0” encoding=“windows-1251”?>
<main>
<Данные>
<ДатаНачала>22.03.2011</ДатаНачала>
<ДатаОкончания>22.03.2011</ДатаОкончания>
<Справочник.Номенклатура>
<IDD>11111110</IDD>
<Код>00000001</Код>
<Наименование>АКСЕССУАРЫ</Наименование>
<ПометкаУдаления>Ложь</ПометкаУдаления>
<ЭтоГруппа>Истина</ЭтоГруппа>
<Родитель>
<Вид>NULL</Вид>
</Родитель>
<СтранаПроисхождения>
<Вид>NULL</Вид>
</СтранаПроисхождения>
<НоменклатурнаяГруппа>
<Вид>NULL</Вид>
</НоменклатурнаяГруппа>
<Параметр1>
<Вид>NULL</Вид>
</Параметр1>
<Параметр2>
<Вид>NULL</Вид>
</Параметр2>
<Параметр3>
<Вид>NULL</Вид>
</Параметр3>
<Параметр4>
<Вид>NULL</Вид>
</Параметр4>
<Параметр5>
<Вид>NULL</Вид>
</Параметр5>
<Параметр6>
<Вид>Справочник._Параметры</Вид>
<IDD>1004811838</IDD>
<Наименование>Двойн</Наименование>
</Параметр6>
<Параметр7>
<Вид>NULL</Вид>
</Параметр7>
<Параметр8>
<Вид>NULL</Вид>
</Параметр8>
<Параметр9>
<Вид>NULL</Вид>
</Параметр9>
<Параметр10>
<Вид>NULL</Вид>
</Параметр10>
<Параметр11>
<Вид>NULL</Вид>
</Параметр11>
<Параметр12>
<Вид>NULL</Вид>
</Параметр12>
<Параметр13>
<Вид>NULL</Вид>
</Параметр13>
<Параметр14>
<Вид>NULL</Вид>
</Параметр14>
<НеВключатьВпрайс>Ложь</НеВключатьВпрайс>
<Услуга>Ложь</Услуга>
<Комментарий></Комментарий>
<НаименованиеПолное></НаименованиеПолное>
</Справочник.Номенклатура>
<Справочник.НоменклатурныеГруппы>
<IDD>10000002193</IDD>
<Код></Код>
<Наименование>АКСЕССУАРЫ</Наименование>
<ПометкаУдаления>Ложь</ПометкаУдаления>
<ЭтоГруппа>Ложь</ЭтоГруппа>
</Справочник.НоменклатурныеГруппы>
<Справочник._ОписанияПараметров>
<IDD>10000000562</IDD>
<Код>1</Код>
<Наименование>Модель</Наименование>
<ПометкаУдаления>Ложь</ПометкаУдаления>
<ЭтоГруппа>Ложь</ЭтоГруппа>
<Владелец>
<Вид>Справочник._ТипыТоваров</Вид>
<IDD>1000002193</IDD>
<Наименование>АКСЕССУАРЫ</Наименование>
</Владелец>
</Справочник._ОписанияПараметров>
<Справочник.Номенклатура>
<IDD>1000878340</IDD>
<Код>64842</Код>
<Наименование>Проставка с двойн</Наименование>
<ПометкаУдаления>Ложь</ПометкаУдаления>
<ЭтоГруппа>Ложь</ЭтоГруппа>
<Родитель>
<Вид>Справочник.Номенклатура</Вид>
<IDD>100485</IDD>
<Наименование>АДАПТЕРЫ</Наименование>
</Родитель>
<СтранаПроисхождения>
<Вид>NULL</Вид>
</СтранаПроисхождения>
<НоменклатурнаяГруппа>
<Вид>Справочник.НоменклатурныеГруппы</Вид>
<IDD>10048110000002193</IDD>
<Наименование>АКСЕССУАРЫ</Наименование>
</НоменклатурнаяГруппа>
<Параметр1>
<Вид>Справочник._Параметры</Вид>
<IDD>1004837</IDD>
<Наименование>Проставка</Наименование>
</Параметр1>
<Параметр2>
<Вид>NULL</Вид>
</Параметр2>
<Параметр3>
<Вид>NULL</Вид>
</Параметр3>
<Параметр4>
<Вид>NULL</Вид>
</Параметр4>
<Параметр5>
<Вид>NULL</Вид>
</Параметр5>
<Параметр6>
<Вид>Справочник._Параметры</Вид>
<IDD>1004881838</IDD>
<Наименование>Двойн</Наименование>
</Параметр6>
<Параметр7>
<Вид>NULL</Вид>
</Параметр7>
<Параметр8>
<Вид>NULL</Вид>
</Параметр8>
<Параметр9>
<Вид>NULL</Вид>
</Параметр9>
<Параметр10>
<Вид>NULL</Вид>
</Параметр10>
<Параметр11>
<Вид>NULL</Вид>
</Параметр11>
<Параметр12>
<Вид>NULL</Вид>
</Параметр12>
<Параметр13>
<Вид>NULL</Вид>
</Параметр13>
<Параметр14>
<Вид>NULL</Вид>
</Параметр14>
<НеВключатьВпрайс>Истина</НеВключатьВпрайс>
<Услуга>Ложь</Услуга>
<Комментарий></Комментарий>
<НаименованиеПолное>Проставка</НаименованиеПолное>
</Справочник.Номенклатура>
</Данные> # вне тега Данные, теги Справочник.Номенклатура и Справочник._ОписанияПараметров не существуют
<Остатки>
<Дата>22.03.2011</Дата>
<Строка>
<Номенклатура>
<Вид>Справочник.Номенклатура</Вид>
<IDD>80797</IDD>
<Наименование>hhhsdfhh</Наименование>
</Номенклатура>
<Количество>2</Количество>
</Строка>
<Строка>
<Номенклатура>
<Вид>Справочник.Номенклатура</Вид>
<IDD>3180797</IDD>
<Наименование>hhhhh</Наименование>
</Номенклатура>
<Количество>2</Количество>
</Строка>
</Остатки>
<Цены>
<Дата>22.03.2011</Дата>
<Строка>
<Номенклатура>
<Вид>Справочник.Номенклатура</Вид>
<IDD>10048110116803359</IDD>
<Наименование>01227 Возвратная пружина педали</Наименование>
</Номенклатура>
<ЦенаТ></ЦенаТ>
<ЦенаТ3>0</ЦенаТ3>
<ЦенаТ5>0</ЦенаТ5>
<ЦенаТ10>0</ЦенаТ10>
<ЦенаС></ЦенаС>
<ЦенаС3>0</ЦенаС3>
<ЦенаС5>0</ЦенаС5>
<ЦенаС10>0</ЦенаС10>
</Строка>
<Строка>
<Номенклатура>
<Вид>Справочник.Номенклатура</Вид>
<IDD>100481480849</IDD>
<Наименование>116 Гибкий нагреват.элемент к вулк-ру Комплекс1</Наименование>
</Номенклатура>
<ЦенаТ></ЦенаТ>
<ЦенаТ3>0</ЦенаТ3>
<ЦенаТ5>0</ЦенаТ5>
<ЦенаТ10>0</ЦенаТ10>
<ЦенаС></ЦенаС>
<ЦенаС3>0</ЦенаС3>
<ЦенаС5>0</ЦенаС5>
<ЦенаС10>0</ЦенаС10>
</Строка>
<Строка>
<Номенклатура>
<Вид>Справочник.Номенклатура</Вид>
<IDD>481154999</IDD>
<Наименование>215 Набор для ремонта покрышек л/а</Наименование>
</Номенклатура>
<ЦенаТ></ЦенаТ>
<ЦенаТ3>0</ЦенаТ3>
<ЦенаТ5>0</ЦенаТ5>
<ЦенаТ10>0</ЦенаТ10>
<ЦенаС></ЦенаС>
<ЦенаС3>0</ЦенаС3>
<ЦенаС5>0</ЦенаС5>
<ЦенаС10>0</ЦенаС10>
</Строка>
</Цены>
</main>
Это не весь файл, потому как в оригинале там около миллиона строк(700 - 800 тысяч), но в общем он состоит из перечисленных записей +- еще пара тегов внутри тега <Данные>
Тэги <Вид>,<IDD> и <Наименование>, как вы заметили могут находиться на разных уровнях, но в себе они никогда не несут еще уровни, только значения.
Кроме главных тегов (Справочник.Номенклатура, Справочник.НоменклатурныеГруппы, Справочник._ОписанияПараметров)
В <Справочник.Номенклатура> они могут входить в состав таких тегов как : Родитель,во все теги Параметр N, НоменклатурнаяГруппа, СтранаПроисхождения.
В <Справочник._ОписанияПараметров> : <Владелец>
А также <Цены>
<Строка>
<Номенклатура>
Вот сюда
</Номенклатура>
и <Остатки>
<Строка>
<Номенклатура>
Сюда
</Номенклатура>
Уточню, что БД достаточно далеко, поэтому хотелось бы данные сначала закидывать в переменные, а потом пересылать, что бы если происходил сбой, парсер смог отследить где произошел разрыв и продолжить с того места (но этот механизм мне еще предстоит прописать)
Запись в Таблицы соответственно называюся Spravochnik.Nomenclatura, Spravochnik.NomenclaturnieGruppi, Spravochnik._OpisParameters, Ceni, Ostatki.
Столбцы в Spravochnik.Nomenclatura: IDD, Cod, Naimenovanie, PometkaUdaleniya,Parents, CountryOrigin, NomenklaturnayaGruppa, Param 1 и до 14.
Столбцы в Spravochnik.NomenclaturnieGruppi: IDD, Cod, Naimenovanie, PometkaUdaleniya, EtoGruppa.
Столбцы в Spravochnik._OpisParameters: IDD, Cod, Naimenovanie, PometkaUdaleniya, EtoGruppa, Vladelec.
Прошу прощения, что Вам приходится так все разжевывать. В своё оправдание могу сказать только, что раньше не приходилось сталкиваться с ООП (разве что в университете на лекциях), ранее работа была связана только с низкоуровневыми, и все эти классы, потоки,и такое , на первый взгляд, беспорядочное пользование ими для меня в новинку, но благодаря Вам многое стало проясняться. Спасибо Вам за терпение и помощь.