Forum Webscript.Ru
Программирование => Perl => Тема начата: NetHead от 25 Марта 2004, 00:28:20
-
Может кто-нибудь посоветует конкретный XML-парсер по-быстрее, по-удобнее, а то их так много...
-
Дело в том что почти все они - это обертки к expat.
Все зависит от твоих предпочтение и задачи.
Мне на 99% хватает XML::Simple
-
Задача такова: XML файл лежит на каком-то сервере (в инете). Его сначала нужно выкочать на свой (или можно обойтись без этого?), а затем парсить, причем файлы достаточно большие, могут доходить до 2000 записей, в каждой из которых несколько дочерних.
Что посоветуете? Как лучше решить эту задачу?
-
Может кто-нибудь чего-нибудь посоветует как парсировать большой XML сильно не нагружая сервер? (насколько я понял XML::Simple весь файл загружает в память)
-
Ты правильно понял.
Почитай:
http://www.ittepic.edu.mx/eBooks/computacion/80oreilly/perl3/pxml/ch03_02.htm
и опиши задачу более конкретно.
-
Задача подробнее:
Нужно парсить прайс такого вида:
<товар id="2133">
[url]http://www....[/url]
<цена>123цена>
<описание>длинная строка длинная строка длинная строка длинная строка длинная строка длинная строка длинная строкаописание>
<всякая другая хрень>...всякая другая хрень>
...
<всякая другая хрень>...всякая другая хрень>
товар>
и таких блоков может доходить до нескольких тысяч. Этот файл чаще лежит на серверах других фирм. Данные из него надо внести в мою базу MySQL. Как лучше (по производительности) сделать?
-
Может, я неактуален, но всё же хотелось бы получить ответ на вопрос NetHead в предыдущем посте.
-
metton немного изменим задачу.
у тебя есть лог апача.
его размер 2 гига. как ты его будеш парсить?
-
NeoNox
Ну за неимением опыта в таких делах, видимо, попробую регами или модуль какой-нибудь по теме найду.
-
metton нет, вероятно я не понял твой вопрос.
вообще вопросов тут два:
1) чем парсить?
2) как парсить большой файл?
так вот, если 2 гига файл ты погрузиш в память, то тебе система(а не Perl) ответит - out of memory!
значит нужно работать с меньшим обьемом данных.
А если ты ищешь ответ на первый вопрос - perldoc XML::Simple тебе с головой хватит.
-
NeoNox
Чем парсить сравнительно немаленький файл. Скажем, как указывал NetHead в последнем своём посте, позиций на тысячу, две.
То есть 1-5 метров от силы. На такое XML::Simple способен? Или есть что-то более шустрое для таких целей?
-
metton
чтобы понять какие парсеры можно использовать достаточно знать как они работают.
Делятся они на 2 вида - SAX и DOM
DOM-парсеры грузят весь XML в память и формируют из него дерево. С ними удобно работать, но они жрут много памяти.
SAX-парсеры просматривают последовательно каждый узел в XML-документе и в зависимости от типа узла выполняют тот или иной обработчик события. Они сравнительно неудобны но проблем с памятью не имеют.
Вывод таков - тебе надо использовать любой SAX-парсер. Если он не криво написан, проблем не будет. Наиболее известным (AFAIK) является Expat и в частности XML::Simple
-
Макс
Предполагается что файлы будут загружаться на сервер (либо в общий XML либо в базу), скажем раз день. Дальше идёт работа уже с этим данными. (к теме не относится)
В таком случае (раз в день) тоже SAX? Или же DOM?
-
SAX (ИМХО)
-
Макс
ОК, пасиба :)