Forum Webscript.Ru

Программирование => Perl => Тема начата: NetHead от 25 Марта 2004, 00:28:20

Название: Какой XML-парсер выбрать?
Отправлено: NetHead от 25 Марта 2004, 00:28:20
Может кто-нибудь посоветует конкретный XML-парсер по-быстрее, по-удобнее, а то их так много...
Название: Какой XML-парсер выбрать?
Отправлено: NeoNox от 25 Марта 2004, 11:28:44
Дело в том что почти все они - это обертки к expat.
Все зависит от твоих предпочтение и задачи.
Мне на 99% хватает XML::Simple
Название: Какой XML-парсер выбрать?
Отправлено: NetHead от 25 Марта 2004, 23:21:02
Задача такова: XML файл лежит на каком-то сервере (в инете). Его сначала нужно выкочать на свой (или можно обойтись без этого?), а затем парсить, причем файлы достаточно большие, могут доходить до 2000 записей, в каждой из которых несколько дочерних.
Что посоветуете? Как лучше решить эту задачу?
Название: Какой XML-парсер выбрать?
Отправлено: NetHead от 27 Марта 2004, 11:38:54
Может кто-нибудь чего-нибудь посоветует как парсировать большой XML сильно не нагружая сервер? (насколько я понял XML::Simple весь файл загружает в память)
Название: Какой XML-парсер выбрать?
Отправлено: NeoNox от 27 Марта 2004, 20:09:43
Ты правильно понял.
Почитай:
http://www.ittepic.edu.mx/eBooks/computacion/80oreilly/perl3/pxml/ch03_02.htm
и опиши задачу более конкретно.
Название: Какой XML-парсер выбрать?
Отправлено: NetHead от 27 Марта 2004, 22:47:46
Задача подробнее:
Нужно парсить прайс такого вида:

<товар id="2133">
  [url]http://www....[/url]
  <цена>123
  <описание>длинная строка длинная строка длинная строка длинная строка длинная строка длинная строка длинная строка
  <всякая другая хрень>...
  ...
  <всякая другая хрень>...


и таких блоков может доходить до нескольких тысяч. Этот файл чаще лежит на серверах других фирм. Данные из него надо внести в мою базу MySQL. Как лучше (по производительности) сделать?
Название: Какой XML-парсер выбрать?
Отправлено: metton от 25 Июня 2004, 23:47:36
Может, я неактуален, но всё же хотелось бы получить ответ на вопрос NetHead в предыдущем посте.
Название: Какой XML-парсер выбрать?
Отправлено: NeoNox от 26 Июня 2004, 20:55:48
metton немного изменим задачу.
у тебя есть лог апача.
его размер 2 гига. как ты его будеш парсить?
Название: Какой XML-парсер выбрать?
Отправлено: metton от 27 Июня 2004, 02:09:21
NeoNox
Ну за неимением опыта в таких делах, видимо, попробую регами или модуль какой-нибудь по теме найду.
Название: Какой XML-парсер выбрать?
Отправлено: NeoNox от 27 Июня 2004, 11:59:40
metton нет, вероятно я не понял твой вопрос.
вообще вопросов тут два:
1) чем парсить?
2) как парсить большой файл?
так вот, если 2 гига файл ты погрузиш в память, то тебе система(а не Perl) ответит - out of memory!
значит нужно работать с меньшим обьемом данных.
А если ты ищешь ответ на первый вопрос - perldoc XML::Simple тебе с головой хватит.
Название: Какой XML-парсер выбрать?
Отправлено: metton от 27 Июня 2004, 22:23:48
NeoNox
Чем парсить сравнительно немаленький файл. Скажем, как указывал NetHead в последнем своём посте, позиций на тысячу, две.
То есть 1-5 метров от силы. На такое XML::Simple способен? Или есть что-то более шустрое для таких целей?
Название: Какой XML-парсер выбрать?
Отправлено: Макс от 28 Июня 2004, 10:41:14
metton
чтобы понять какие парсеры можно использовать достаточно знать как они работают.
Делятся они на 2 вида - SAX и DOM
DOM-парсеры грузят весь XML в память и формируют из него дерево. С ними удобно работать, но они жрут много памяти.
SAX-парсеры просматривают последовательно каждый узел в XML-документе и в зависимости от типа узла выполняют тот или иной обработчик события. Они сравнительно неудобны но проблем с памятью не имеют.

Вывод таков - тебе надо использовать любой SAX-парсер. Если он не криво написан, проблем не будет. Наиболее известным (AFAIK) является Expat и в частности XML::Simple
Название: Какой XML-парсер выбрать?
Отправлено: metton от 28 Июня 2004, 13:30:23
Макс
Предполагается что файлы будут загружаться на сервер (либо в общий XML либо в базу), скажем раз день. Дальше идёт работа уже с этим данными. (к теме не относится)
В таком случае (раз в день) тоже SAX? Или же DOM?
Название: Какой XML-парсер выбрать?
Отправлено: Макс от 28 Июня 2004, 13:43:18
SAX (ИМХО)
Название: Какой XML-парсер выбрать?
Отправлено: metton от 28 Июня 2004, 14:06:11
Макс
ОК, пасиба :)