Автор Тема: Парсинг определенной части XML  (Прочитано 4016 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
Парсинг определенной части XML
« : 30 Января 2005, 14:26:58 »
Существует объемный XML документ (1-5 мегабайт) следующего формата:


   
        ...
   


   
        ...
   

    ...
   
        ...
   



Необходимо получить заданную ноду и преобразовать ее при помощи XML::Simple в структуру. Порылся в модулях – многие позволяют делать поиск по документу, но предварительно производят парсинг всего документа, а именно этого я пытаюсь избежать. В принципе, конкретно эту проблему можно решить подручными средствами, но хотелось бы найти готовое решение. Что посоветуете?
There Is More Than One Way To Do It (c)

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Парсинг определенной части XML
« Ответ #1 : 30 Января 2005, 18:17:54 »
Если Вы хотите работать с документом как с XML, то без парсинга не обойтись, поэтому врядли найдете готовое решение. Так что пишите свой парсер и работайте с XML как с TXT, не проверяя на валидность, правда в таком случае встает вопрос - а может тогда лучше уйти в сторону БД?
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Парсинг определенной части XML
« Ответ #2 : 30 Января 2005, 18:24:03 »
vladsu, ты хоть сам понял, что сказал?:)
2NetFly, воспользуйся любым модулем, который не читает всё дерево сразу в память. Не понял в чём проблема? Поиск осуществляешь последовательно перебирая ноды...
Ну к чему все это, лучше бы водки выпили...

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
Парсинг определенной части XML
« Ответ #3 : 30 Января 2005, 21:43:42 »
Цитировать
glebushka:
воспользуйся любым модулем, который не читает всё дерево сразу в память.

Если внимательно прочитать мое первое сообщение можно заметить, что именно готовый модуль я и ищу ;=)
There Is More Than One Way To Do It (c)

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Парсинг определенной части XML
« Ответ #4 : 31 Января 2005, 00:40:25 »
2NetFly, как тебе мало для счастья надо:) Вышеописанный поиск реализуется несколькими строчками кода. ИМХО, врятли кто-нибудь стал бы выделять их в отдельную функцию модуля и выкладывать на CPAN.
Ну к чему все это, лучше бы водки выпили...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Парсинг определенной части XML
« Ответ #5 : 31 Января 2005, 01:30:50 »
2NetFly
парсеры, которые не читают весь XML в память называются SAX-парсерами.
Наиболее известный такой freeware-парсер - Expat.

Вроде в perl есть XML-SAX-Expat
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
Парсинг определенной части XML
« Ответ #6 : 31 Января 2005, 11:13:11 »
SAX – это, конечно, хорошо, но для данной задачи написание обработчиков - это слишком. Судя по всему, собственная реализация в данном случае будем оптимальной: построчная проверка и прекращение чтения файла после нахождения нужного фрагмента.

Спасибо всем за внимание.
There Is More Than One Way To Do It (c)

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Парсинг определенной части XML
« Ответ #7 : 31 Января 2005, 15:22:50 »
Цитировать
glebushka:
vladsu, ты хоть сам понял, что сказал?

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28