Страница 1 из 1

Импорт данных из XML

Добавлено: 21 дек 2007, 02:32
KKomov
Есть гора XML-ей, из них нужно извлечь данные и вставить в базу.

Пока план такой: задействовать парсер Билдера, обход тегов и извлечение написать вручную. Данные можно сразу вставить через IBSQL, или сгенерить sql-скрипт. Но уж больно муторно ползать по тегам вручную.

Как это делают опытные люди? Какие приёмы хорошо себя зарекомендовали?

Добавлено: 21 дек 2007, 07:35
Tonal
Я писал на Python-е
Разбирал SAX-ом.
Данные обновлял пакетно. Вроде по 1000 записей за раз. После чего сбрасывал буфера. Все запросы были с параметрами. Драйвер сам препарировал запрос при первом использовании.
На один файл одна транзакция.

Б.м. шустро работало для тех объёмов. :-)

Главная идея - использовать не DOM а SAX при работе с xml и вовремя скидывать буфера. Иначе на больших объёмах по памяти загнётся. :-)

Добавлено: 22 дек 2007, 19:10
KKomov
Tonal писал(а):Я писал на Python-е
Разбирал SAX-ом.
Данные обновлял пакетно. Вроде по 1000 записей за раз. После чего сбрасывал буфера. Все запросы были с параметрами. Драйвер сам препарировал запрос при первом использовании.
На один файл одна транзакция.

Б.м. шустро работало для тех объёмов. :-)

Главная идея - использовать не DOM а SAX при работе с xml и вовремя скидывать буфера. Иначе на больших объёмах по памяти загнётся. :-)
Спасибо за отклик и подсказку.

Про буфер я не забываю, только я ставил COMMIT в скрипте через 20, потом через 50, вставок. М.б. с порядком величины ошибся, и стоит перейти на 200-500.

Ни Питоном, ни Саксом, к сожалению, на данный момент я не владею.

А на Си++ в среде Билдер монжно написать то, что вы делали на Питоне? И этот "Сакс", его можно быстро освоить? В Билдере есть свой генератор парсера по XSD или по самому документу XML. Но вот про SAX в Билдере упоминаний нет.

(В сторону) Ах, Питон, Питон - куда ни сунешься, везде он. И бустовцы его пользуют, и при импорте из xml он полезен, оказалось. Неужели это незаменимый вариант и таки придётся его освоить?..

Хотелось бы также услышать тех, кто ограничивался Билдером/Дельфи в этой задаче.

Добавлено: 22 дек 2007, 23:47
break
Когда-то делал программу Справочник города (точнее то в чем операторы этот справочник набивали, прозванивали и т.д.)

Там ограничился только Delphi для выгрузки и загрузки в XML но через DOM - скорость выполнения не волновала т.к. это была редкая операция, был задействован майкрософтовский парсер XML. Один коммит на один файл, чтобы оставалаь возможность полностью откатиться при попытке загрузить поврежденный файл.

Если действительно потребуется использовать SAX - можно взять реализацию из библиотеки QT, предварительно заставив работать ее в билдере (хотя не знаю возможно ли это так как пользовался под Windows ею в MS Visual Studio).

Если чем то поможет - могу скинуть по электронке исходники моего XML модуля из этой программы справочника.

Добавлено: 23 дек 2007, 08:41
Tonal
В C++Builder-е, как и в Delphi для работы с XML используется оболочка вокруг MS XML.
Сам MS XML включаает SAX.
Так что использовать - можно, я это делал на C++Builder6 лет 5 назад.
Там вроде ничего особо сложного, да и в MSDN-е довольно подробно и с примерами описано.

P.S. На python-е скорость разработки увеличивается в разы. Так что если задача не очень критичная по времени/памяти, имеет смысл его использовать.