Forum Webscript.Ru

Программирование => Perl => Тема начата: 2NetFly от 30 Января 2005, 14:26:58

Название: Парсинг определенной части XML
Отправлено: 2NetFly от 30 Января 2005, 14:26:58
Существует объемный XML документ (1-5 мегабайт) следующего формата:


   
        ...
   


   
        ...
   

    ...
   
        ...
   



Необходимо получить заданную ноду и преобразовать ее при помощи XML::Simple в структуру. Порылся в модулях – многие позволяют делать поиск по документу, но предварительно производят парсинг всего документа, а именно этого я пытаюсь избежать. В принципе, конкретно эту проблему можно решить подручными средствами, но хотелось бы найти готовое решение. Что посоветуете?
Название: Парсинг определенной части XML
Отправлено: vladsu от 30 Января 2005, 18:17:54
Если Вы хотите работать с документом как с XML, то без парсинга не обойтись, поэтому врядли найдете готовое решение. Так что пишите свой парсер и работайте с XML как с TXT, не проверяя на валидность, правда в таком случае встает вопрос - а может тогда лучше уйти в сторону БД?
Название: Парсинг определенной части XML
Отправлено: glebushka от 30 Января 2005, 18:24:03
vladsu, ты хоть сам понял, что сказал?:)
2NetFly, воспользуйся любым модулем, который не читает всё дерево сразу в память. Не понял в чём проблема? Поиск осуществляешь последовательно перебирая ноды...
Название: Парсинг определенной части XML
Отправлено: 2NetFly от 30 Января 2005, 21:43:42
Цитировать
glebushka:
воспользуйся любым модулем, который не читает всё дерево сразу в память.

Если внимательно прочитать мое первое сообщение можно заметить, что именно готовый модуль я и ищу ;=)
Название: Парсинг определенной части XML
Отправлено: glebushka от 31 Января 2005, 00:40:25
2NetFly, как тебе мало для счастья надо:) Вышеописанный поиск реализуется несколькими строчками кода. ИМХО, врятли кто-нибудь стал бы выделять их в отдельную функцию модуля и выкладывать на CPAN.
Название: Парсинг определенной части XML
Отправлено: Макс от 31 Января 2005, 01:30:50
2NetFly
парсеры, которые не читают весь XML в память называются SAX-парсерами.
Наиболее известный такой freeware-парсер - Expat.

Вроде в perl есть XML-SAX-Expat
Название: Парсинг определенной части XML
Отправлено: 2NetFly от 31 Января 2005, 11:13:11
SAX – это, конечно, хорошо, но для данной задачи написание обработчиков - это слишком. Судя по всему, собственная реализация в данном случае будем оптимальной: построчная проверка и прекращение чтения файла после нахождения нужного фрагмента.

Спасибо всем за внимание.
Название: Парсинг определенной части XML
Отправлено: vladsu от 31 Января 2005, 15:22:50
Цитировать
glebushka:
vladsu, ты хоть сам понял, что сказал?

Конечно, а Вы видимо - нет. Вас наверное смутила фраза "работайте с XML как с TXT", действительно глупость сморозил, но я имел ввиду работать построчно.