![]() |
|
Модераторы: ginnie |
![]()
|
|
| dron000 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.9.2006 Репутация: нет Всего: нет |
Добрый день!
Подскажите со следующей задачей, необходимо в xml искать блоки тегов выдергивать содержимое: (насчет внешнего совпадающего имени тэга и внутреннего это не опечатка - так и есть)
К примеру
Долго и не работает. Имена и количество полей известны и постоянны, порядок следования постоянен.Есть какие-то методы поиска целых кусков? |
||||
|
|||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
А почему бы не заюзать стандартный XML-parser ?? Допустим XML::Simple, ну или что "потяжелее" - если не достаточно функциональности. -------------------- менеджер по кодеврайтингу |
|||
|
||||
| dron000 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.9.2006 Репутация: нет Всего: нет |
Подкинешь нормальную ссылку с описанием?
|
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
http://search.cpan.org/~pajas/XML-LibXML-1.70/LibXML.pod - лично я использую оный -------------------- менеджер по кодеврайтингу |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 1 Всего: 49 |
dron000, советую попробовать XML::Parser. Меня очень порадовала скорость обработки 300Мб XML-файлов.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| dron000 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.9.2006 Репутация: нет Всего: нет |
Спасибо.Нашел XML-Simple вроде вполне подойдет только интересует вопрос можно ли там получаемую структуру как-то посмотреть, потому как если xml'ник 'сложной' структуры то не очень удобно будет писать. У меня вроде бы о больших объемах речь пока не идет но все таки интересно parser намного быстрей?
|
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 1 Всего: 31 |
dron000, сооветую попробовать XML::LibXML и XML::LibXML::Simple - очень надежные и мощные библиотеки. от Gnome =)
|
|||
|
||||
| dron000 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.9.2006 Репутация: нет Всего: нет |
Делаю следующее:
Возникает ошибка: junk after document element at line 1, column 456, byte 456 at C:/perl/lib/XML/Parser.pm line 187, Открыл пакет XML Simple 2.18 это как раз тело sub XMLin{},блок
Как я понял проблем в этой строке return $self->parse_fh($target, @_); Кто нибудь сталкиваля с подобным? |
||||
|
|||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
-------------------- менеджер по кодеврайтингу |
|||
|
||||
| dron000 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.9.2006 Репутация: нет Всего: нет |
Да собственно переменная $my_xml получает строку состоящую из блоков вида:
Синтаксис проверял и в валидаторе и сам - ошибок нет.Или там какой-то особый формат должен быть? |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
обрати внимание на свой вариант - не хорошо так писать. -------------------- менеджер по кодеврайтингу |
|||
|
||||
| dron000 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.9.2006 Репутация: нет Всего: нет |
К примеру при
происходит таже ошибка, если оставить только '<name1>35434</name1> то можно обратиться $ref->{name1}->[0]; и работает без ошибок. Добавлено через 8 минут и 26 секунд Гы... |
|||
|
||||
| dron000 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.9.2006 Репутация: нет Всего: нет |
Заранее извиняюсь если вопрос тупой.А как обратиться если таких блоков несколько например два
Потому как такое обращение уже не прокатывает print $ref->{name} -> [0] -> {name2} -> [0] -выдает аналогичную ошибку пакета... Не понятно почему, ведь даж относительный адрес указанного элемента не меняется...или я чего-то не понимаю? |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 1 Всего: 31 |
Никак. То что вы написали не является XML. Изучите какой-нть простой мануал по XML - исчезнут такие вопросы. Кстати как я помню, в начале XML не допускаются никакие символы до первого тэга. P.S. Можно использовать XML::LibXML::Simple за место XML::Simple - интерфейс тот же, но более надежна. |
|||
|
||||
| dron000 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.9.2006 Репутация: нет Всего: нет |
Ну да, вот так лучше будет:
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Регулярные выражения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |