![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| AlexanderI |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 2 Всего: 3 |
Здравствуйте.
Пытаюсь парсить XML файл 10 мб модулем XML::Simple, не получается, похоже файл слишком большой, не получилось. Почитав форум, попробывал использовать XML::Twig. Тоже не получилось. Подскажите как можно пропарсить XML файл для дальнейшей записи данных в базу ? Может както разбить XML файл на несколько частей ? А может кто покажет примерный пример как это сделать ? --------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
XML::Parser
|
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Сначала использовал XML::Twig, потом переделал на XML::Parser. Очень непривычно, но скорость оправдывает затраты на разработку.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| AlexanderI |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 2 Всего: 3 |
А можете привести какой-нибудь не сложный пример парсинга с XML::Parser.
Что-то никак не могу разобраться с ним. Примеры которые приводятся вместе с модулем читал, и perldoc тоже :( --------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
10 Мб - это не очень много.
Примерно 30 - 40 Мб памяти если разбирать с помощьбю DOM. Поэтому рекомендую XML::Simple или XML::LibXML::Simple Хотя если память дико ограничена... |
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: 1 Всего: 1 |
Может там сегодня 10 мегабайт, а со временем будет 100. Лучше перестраховаться.
|
|||
|
||||
| AlexanderI |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 2 Всего: 3 |
Пробую всё делать под Windows c установленным Denwer 3.
Может мне нужно настроить Denwer чтобы он выделял больше памяти ? Через XML::Simple - зависает всё. Через XML::Twig - зависает после вывода ~ 308 килобайт Через XML::Parser - обрабатывает кое-как файл 1 мб. Если отрабатывать 9 мб файл, то тоже подвисает. Вот перебирать с помощью Dom я не пробывал. Где можно прочитать про это ? Может у когото есть исходники обработки большого файла ? Может при обработки большого файла есть какие-то особенности ? --------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
интересно, каким образом вы подвесили XML::Parser на 1M ?
|
|||
|
||||
| AlexanderI |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 2 Всего: 3 |
arto, прям вот так, только не 1 мб, а 9 мб.
Вот я думаю, не может же такое быть чтобы ни один парсер не справился, может в другую сторону копать надо ... --------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
# perl -le 'print "<document>"; foreach (@ARGV) { print "<row number=\"$_\">@{[rand 1024]}</row>"; } print "</document>";' {1..1000000} > /opt/tmp/test.xml
# ls -lh /opt/tmp/test.xml -rw-r--r--. 1 arto arto 42M 2010-01-20 20:51 /opt/tmp/test.xml # time perl -MXML::Parser -e '$p = new XML::Parser (''Style'' => "Debug"); $p->parsefile ($ARGV[0])' /opt/tmp/test.xml |& wc -l 4000476 Real: 101.66s User: 66.16s System: 18.85s Percent: 83%% Cmd: perl -MXML::Parser -e /opt/tmp/test.xml 2>&1 Real: 101.65s User: 2.37s System: 12.38s Percent: 14%% Cmd: wc -l # |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
что-то тут не так. я 70 метровые XML::Twig без проблем обрабатывал
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
по поводу 9М и XML::Parser:
# perl -le 'print "<document>"; foreach (@ARGV) { print "<row number=\"$_\">@{[rand 1024]}</row>"; } print "</document>";' {1..5000000} >| /opt/tmp/test.xml # ls -lh /opt/tmp/test.xml -rw-r--r--. 1 arto arto 213M 2010-01-20 23:39 /opt/tmp/test.xml # time perl -MXML::Parser -e 'my $p = new XML::Parser (Handlers => { Start => sub { },End => sub { }, Char => sub { } }); $p->parsefile ($ARGV[0])' /opt/tmp/test.xml Real: 60.30s User: 51.01s System: 1.29s Percent: 86%% Cmd: perl -MXML::Parser -e /opt/tmp/test.xml # 213M за одну минуту. |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |