Форум сайта python.su
А если действовать через InputSource, а именно через setCharacterStream(charfile) и getCharacterStream()? только непонятно как они будут читать файл и записывать нужный кусок в переменную… но зато он возвращает файл-обьект с содержимым (непонятно каким)…
Офлайн
А возможно использование InputSource в паре с Locator, чтобы последний передовал InputSource положение в файле?
Офлайн
Раз дискуссия продолжается отвечу на то, что мне непонятно.
Aristo.pyЗдесь уже непонятно.
Определилось кол-во видов нодов для обработки. Набор нужных тегов, которые содержаться в них, и в итоге:
стало очевидно, что этот подход не для моего случая, т.к.:
1) Нужно обрабарывать содержимое 2-4 основных тегов (наподобие “Номенклатура” или “ОписанияПараметров”);
2)В парсере должен быть предусмотрен легкий разбор подуровней (почти,предел есть всему)бесконечного кол-ва уровней вложенности, потому как исходный документ может немного меняться в сторону увеличения уровней вложенности, поэтому надо предусмотреть легкое добавление обработчика последнего(возможно нового) уровня.И? В чем Вы видите сложность добавления нужных уровней в моем подходе?
Руководитель рекомендует (читай: настаивает) на варианте подхода с выдиранием по 1му ноду (типа “Номенклатура”) в переменную, и обрабатывать этот кусочек отдельно, преимущество: - позволяет легко изменять кол-во обрабатываемых уровней, а также нодов.Это я не понял совсем. Дичь какая-то по-моему.
Офлайн
Ок. Пример:
<?xml version=“1.0” encoding=“windows-1251”?>
<main>
<Данные>
<Справочник.Номенклатура>
<IDD>11111110</IDD>
<Код>00000001</Код>
<Наименование>АКСЕССУАРЫ</Наименование>
<ПометкаУдаления>Ложь</ПометкаУдаления>
<ЭтоГруппа>Истина</ЭтоГруппа>
<Родитель>
<Вид>Блалалалал</Вид>
<IDD>1004838</IDD>
<Наименование>Дн</Наименование>
</Родитель>
<СтранаПроисхождения>
<Вид>NULL</Вид>
</СтранаПроисхождения>
<НоменклатурнаяГруппа>
<Вид>NULL</Вид>
</НоменклатурнаяГруппа>
<Параметр1>
<Вид>NULL</Вид>
</Параметр1>
<Параметр2>
<Вид>NULL</Вид>
</Параметр2>
<Параметр3>
<Вид>аааалалал</Вид>
<IDD>156764838</IDD>
<Наименование>Дукппн</Наименование>
</Параметр3>
<Параметр4>
<Вид>ввввалалал</Вид>
<IDD>156994838</IDD>
<Наименование>Дуаыван</Наименование>
</Параметр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>10000000562</IDD>
<Код>1</Код>
<Наименование>Модель</Наименование>
<ПометкаУдаления>Ложь</ПометкаУдаления>
<ЭтоГруппа>Ложь</ЭтоГруппа>
<Владелец>
<Вид>Справочник._ТипыТоваров</Вид>
<IDD>1000002193</IDD>
<Наименование>АКСЕССУАРЫ</Наименование>
</Владелец>
</Справочник._ОписанияПараметров>
<Справочник.Номенклатура>
<IDD>1000878340</IDD>
<Код>64842</Код>
<Наименование>Проставка с двойн</Наименование>
<ПометкаУдаления>Ложь</ПометкаУдаления>
<ЭтоГруппа>Ложь</ЭтоГруппа>
<Родитель>
<Вид>Справочник.Номенклатура</Вид>
<IDD>100485</IDD>
<Наименование>АДАПТЕРЫ</Наименование>
</Родитель>
<СтранаПроисхождения>
<Вид>NULL</Вид>
</СтранаПроисхождения>
<НоменклатурнаяГруппа>
<Вид>Справочник.НоменклатурныеГруппы</Вид>
<IDD>1000002193</IDD>
<Наименование>АКСЕССУАРЫ</Наименование>
</НоменклатурнаяГруппа>
<Параметр1>
<Вид>Справочник._Параметры</Вид>
<IDD>1004837</IDD>
<Наименование>Проставка</Наименование>
</Параметр1>
<Параметр2>
<Вид>NULL</Вид>
</Параметр2>
<Параметр3>
<Вид>NULL</Вид>
</Параметр3>
<Параметр4>
<Вид>NULL</Вид>
</Параметр4>
<Параметр5>
<Вид>NULL</Вид>
</Параметр5>
<Параметр6>
<Вид>Справочник._Параметры</Вид>
<IDD>100438</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>
<НеВключатьВпрайс>Истина</НеВключатьВпрайс>
<Услуга>Ложь</Услуга>
<Комментарий></Комментарий>
<НаименованиеПолное>Проставка</НаименованиеПолное>
</Справочник.Номенклатура>
</Данные> # вне тега Данные, теги Справочник.Номенклатура и Справочник._ОписанияПараметров не существуют
</main>
отсюда нужно получить:
из “Справочник.Номенклатура” (в таблицу Nomenclatura)
IDD > iddc
Наименование > namen
Родитель
IDD >idB
НоменклатурнаяГруппа (сначала некоторое содержимое этого тега идет в таблицу TipGroup, затем в таблицу Nomenklatura в поле tipgroup размещается указатель на эту запись в таблице TipGroup)
IDD >iddc
Наименование > namen
Параметр1 (сначала некоторое содержимое этого тега идет в таблицу Par1, затем в таблицу Nomenklatura в поле parameter1 размещается указатель на эту запись в таблице Par1) #и так все Параметры, для каждого параметра создана таблица с соответствующим именем вида Par1, Par2, Par3 и т.п.
IDD >iddc
Наименование > namen
по сути, непонятно только как при таком подходе организовать доступ и чтение последних уровней вложенности, и как рационально организовать возврат указателя на нужную запись в определенной таблице в другую таблицу .
Офлайн
Aristo.pyНепонятно насчет некоторого содержимого. Как вы представляете я смогу вам запрограммировать это?
отсюда нужно получить:
из “Справочник.Номенклатура” (в таблицу Nomenclatura)
IDD > iddc
Наименование > namen
Родитель
IDD >idB
НоменклатурнаяГруппа (сначала некоторое содержимое этого тега идет в таблицу TipGroup, затем в таблицу Nomenklatura в поле tipgroup размещается указатель на эту запись в таблице TipGroup)
IDD >iddc
Наименование > namen
Параметр1 (сначала некоторое содержимое этого тега идет в таблицу Par1, затем в таблицу Nomenklatura в поле parameter1 размещается указатель на эту запись в таблице Par1) #и так все Параметры, для каждого параметра создана таблица с соответствующим именем вида Par1, Par2, Par3 и т.п.
IDD >iddc
Наименование > namen
по сути, непонятно только как при таком подходе организовать доступ и чтение последних уровней вложенности, и как рационально организовать возврат указателя на нужную запись в определенной таблице в другую таблицу .Все равно не вижу проблемы. Парсинг происходит в один проход. Если нужны некие данные из уже обработанного, то их нужно предварительно сохранить. В чем проблема-то? Может на примере поясните? Вот на этом, который привели.
Офлайн
Вот все данные, которые нужно выдернуть, все не перечисленные здесь игнорировать:
Aristo.pyКод для примера подойдет последний.
“Справочник.Номенклатура” (в таблицу Nomenclatura)
IDD > iddc
Наименование > namen
Родитель
IDD >idB
НоменклатурнаяГруппа (сначала в таблицу TipGroup, затем в таблицу Nomenklatura в поле tipgroup размещается указатель на эту запись в таблице TipGroup)
IDD >iddc
Наименование > namen
Параметр1 (сначала в таблицу Par1, затем в таблицу Nomenklatura в поле parameter1 размещается указатель на эту запись в таблице Par1) #и так все Параметры, для каждого параметра создана таблица с соответствующим именем вида Par1, Par2, Par3 и т.п.
IDD >iddc
Наименование > namen
Отредактировано (Фев. 28, 2012 11:19:43)
Офлайн
А в чем принципиальная разница между тэгами последнего уровня и остальными? Парсер парсит все, заходит на все уровни.
Кстати, можете привести пример ‘тэга последнего уровня’ и сформулировать таки в чем проблема с ними?
Офлайн
Edу меня почему то не выводит… щас пошаманю, посмотрим…
А в чем принципиальная разница между тэгами последнего уровня и остальными? Парсер парсит все, заходит на все уровни.
Кстати, можете привести пример ‘тэга последнего уровня’ и сформулировать таки в чем проблема с ними?
Отредактировано (Фев. 28, 2012 13:33:46)
Офлайн
Да, выглядит нормально.
Офлайн
Подскажите как туда поставить условия проверки на наличие такой записи в таблице перед тем как ее создать?
А также как после добавления записи (к примеру) Параметр1(его IDD и Наименование) в таблицу Par1 вернуть указатель на эту запись в таблице Nomenclatura в поле par1?
Отредактировано (Фев. 28, 2012 15:03:30)
Офлайн