Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696

Ошибка с XML::RSS::Parser

04.04.2013, 19:14. Показов 2989. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Пишу так:
Perl
1
2
3
4
my $url = 'http://www.url.to.rss.xml';
my $p = XML::RSS::Parser->new;
my $feed = $p->parse_uri($url);
my $feed_title = $feed->query('/channel/title');
Всё работает. Но мне нужно сначала загрузить XML в строку, немного его подправить и только потом его распарсить. Пишу:
Perl
1
2
3
4
5
my $url = 'http://www.url.to.rss.xml';
my $p = XML::RSS::Parser->new;
my $txt = get($url);
my $feed = $p->parse_string($txt);
my $feed_title = $feed->query('/channel/title');
И получаю ошибку
Can't call method "query" on an undefined value at V:/home/localhost/cgi-bin/prs_.pl line...
Страница выводится вплоть до строки "my $feed_title = $feed->query('/channel/title');". В чем дело?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.04.2013, 19:14
Ответы с готовыми решениями:

XML Parser - read error Expat.pm at line 469 - Centos
Добрый день! скрипт gарсит xml с Ironport для дальнейшей передачи данных в zabbix (приложен к сообщению). На вин7 скрипт запускается. ...

XML в переменной разобрать с помошью XML:Simple
Есть вопрос. Мой скрипт в POST запросе получает XML со списком параметров вида <parameter1>1</parameter1> ...

Парсинг HTML HTML::Parser
Хочу предложить перевод статьи Ken MacFarlane. Надеюсь у новичков после прочтения, отпадёт много вопросос по этой теме :)....

21
 Аватар для petrovish1981
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
05.04.2013, 04:04
выложите правильный url и глянте сюда http://search.cpan.org/~tima/X... /Parser.pm

Добавлено через 5 часов 1 минуту
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 use strict;
 use XML::RSS::Parser;
 use LWP;
 my $url = 'http:// ....... file.xml';
my $p = XML::RSS::Parser->new();
my $ua = LWP::UserAgent->new();
my $response = $ua->request(HTTP::Request->new(GET => $url));
my $txt = $response->decoded_content ;
#  Работаете с $txt
my $feed = $p->parse_string($txt);
 my $feed_title = $feed->query('/channel/title');
 print $feed_title->text_content;
 my $count = $feed->item_count;
 print " ($count)\n";
 foreach my $i ( $feed->query('//item') ) { 
     my $node = $i->query('title');
     print '  '.$node->text_content;
     print "\n"; 
 }
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.04.2013, 05:19  [ТС]
Цитата Сообщение от petrovish1981 Посмотреть сообщение
выложите правильный url
http://www.fishnet.ru/news/rss.xml

Добавлено через 2 минуты
Цитата Сообщение от petrovish1981 Посмотреть сообщение
глянте сюда
я смотрел, но ничего не увидел...
0
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
05.04.2013, 11:01
Попробуйте так
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
#!perl
 
use strict;
use XML::Simple;
use Data::Dumper;
use LWP::UserAgent;
 
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => 'http://www.fishnet.ru/news/rss.xml');
my $txt = $ua->request($req)->as_string;
$txt =~ s/.*?(<\?xml.*)/$1/s;
my $rss = XMLin($txt);
print Dumper($rss), "\n";
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.04.2013, 15:45  [ТС]
Цитата Сообщение от petrovish1981 Посмотреть сообщение
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 use strict;
 use XML::RSS::Parser;
 use LWP;
 my $url = 'http:// ....... file.xml';
my $p = XML::RSS::Parser->new();
my $ua = LWP::UserAgent->new();
my $response = $ua->request(HTTP::Request->new(GET => $url));
my $txt = $response->decoded_content ;
#  Работаете с $txt
my $feed = $p->parse_string($txt);
 my $feed_title = $feed->query('/channel/title');
 print $feed_title->text_content;
 my $count = $feed->item_count;
 print " ($count)\n";
 foreach my $i ( $feed->query('//item') ) { 
     my $node = $i->query('title');
     print '  '.$node->text_content;
     print "\n"; 
 }
Не помогло. Результат тот же
0
 Аватар для petrovish1981
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
05.04.2013, 17:16
Возможно вам нужно использовать XML::Simple он более стабильный, или написать парсер под себя с ноля,если вам нужно только несколько манипуляций с XML.
Я поступил бы так.

Добавлено через 10 минут
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use strict;
 use XML::RSS::Parser;
 use LWP;
 my $url = 'http://www.fishnet.ru/news/rss.xml';
my $p = XML::RSS::Parser->new();
my $ua = LWP::UserAgent->new();
my $response = $ua->request(HTTP::Request->new(GET => $url));
my $txt = $response->decoded_content ;
#  Работаете с $txt
my $feed = $p->parse_string($txt);
 my $feed_title = $feed->query('/channel/title');
 print $feed_title->text_content;
 my $count = $feed->item_count;
 print " ($count)\n";
 foreach my $i ( $feed->query('//item') ) { 
     my $node = $i->query('title');
     print '  '.$node->text_content;
     print "\n"; 
 }
У меня этот код работает!!!
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.04.2013, 18:43  [ТС]
Цитата Сообщение от petrovish1981 Посмотреть сообщение
У меня этот код работает!!!
Только что скопировал Ваш код и получил ошибку
Can't call method "query" on an undefined value at V:/home/localhost/cgi-bin/regex.pl line 12.
Может быть такое, что что-то не так у меня с библиотекой? Как это проверить/исправить?
0
 Аватар для petrovish1981
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
05.04.2013, 19:05
запустите перл с выводом ошибок #!/usr/bin/perl -w
и
use warnings;
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.04.2013, 22:00  [ТС]
Цитата Сообщение от petrovish1981 Посмотреть сообщение
запустите перл с выводом ошибок #!/usr/bin/perl -w
и
use warnings;
Сделал. Получил, как и ранее, только строку
Can't call method "query" on an undefined value at V:/home/localhost/cgi-bin/regex.pl line 12.
0
 Аватар для petrovish1981
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
05.04.2013, 22:11
попробуйте переустановить весь XML::RSS ,а также XML::Elemental
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.04.2013, 22:52  [ТС]
Еще появлялось сообщение
could not find ParserDetails.ini
но я создал этот файл пустым и сообщение исчезло.

Добавлено через 12 минут
Цитата Сообщение от petrovish1981 Посмотреть сообщение
попробуйте переустановить весь XML::RSS ,а также XML::Elemental
Не помогло
0
 Аватар для petrovish1981
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
05.04.2013, 22:59
на какой системе вы работаете?
и как устанавливаете модули?
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.04.2013, 23:08  [ТС]
Windows8x86.
Стоит Denwer и в него поставлен свежий ActivePerl.
Код запускал и в консоли, и в браузере. Результат один.
Не понимаю, почему по URL или из файла этой же библиотекой всё нормально парсится, но со строки не хочет.
Модули ставлю через PerlPackageManager.

Добавлено через 5 минут
Хотел уже распарсить с помощью RSS-Parser-Lite, но у него есть четко опрееленный список полей, которые он может отдавать и "pubDate" в него не входит. Потому я не могу получить дату публикации новости.
0
 Аватар для petrovish1981
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
05.04.2013, 23:20
попробуйте через cpan
потом в cpan наберите upgrade
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.04.2013, 23:28  [ТС]
А можете подсказать как это делать? Ни разу им не пользовался.
0
 Аватар для petrovish1981
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
05.04.2013, 23:47
В линуксе так
в консоле набираете cpan и ввод
install название модуля
Я в вашей системе не работал.
возможно прийдется в директории ActivePerl найти файл cpan и запустить его
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
06.04.2013, 00:20  [ТС]
Цитата Сообщение от petrovish1981 Посмотреть сообщение
install название модуля
А уже установленные модули нужно удалить перед установкой через cpan?
0
 Аватар для petrovish1981
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
06.04.2013, 00:41
думаю не нужно
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
06.04.2013, 02:48  [ТС]
Цитата Сообщение от pka Посмотреть сообщение
$txt =~ s/.*?(<\?xml.*)/$1/s;
А зачем эта строка?

Добавлено через 16 минут
Цитата Сообщение от petrovish1981 Посмотреть сообщение
попробуйте через cpan
потом в cpan наберите upgrade
Не помогло
Уже второй день бьюсь. Может стоит переустановить ОСь и поставить всё не чистую? А то у меня стоит 2 перла и, возможно, что-то у них путается: сначала просто поставил под консоль, а потом отдельно в денвер поставил.

Добавлено через 1 минуту
Наверное, у меня что-то с XML::SAX...
0
 Аватар для petrovish1981
63 / 38 / 6
Регистрация: 24.01.2013
Сообщений: 136
06.04.2013, 04:25
У вас что то с модулями.
При попытках добавления-удаления модулей XML
XML::RSS::Parser выдаёт ошибки на подобии вашей.
попробуйте сохранить переменную в файл,а потом парсить через файл ( метод - не очень,но.......... )
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.04.2013, 04:25
Помогаю со студенческими работами здесь

Пытаюсь взять курс с CBR.RU по XML. Раньше работало, сейчас перестало. Ошибка: parser error : Document is empt
если в браузер вставить эту ссылку, то всё нормально открывается: http://www.cbr.ru/scripts/XML_daily_eng.asp?date_req=02:02:2017 а...

XML Parser
Разбираюсь с open source проектом http://conv-net.sourceforge.net/doc/index.html свёрточная нейронная сеть вот, в котором в свою очередь...

XML Parser
Здравствуйте! есть xml-файл с таким содержанием &lt;shop&gt; &lt;category name=&quot;for_mum&quot;&gt; &lt;good&gt;веник&lt;/good&gt; ...

JavaScript parser xml
Добрый день, помогите пожалуйста пропарсить данные и разобраться как это все работает. Задача: Есть запрос который возвращает...

Parser XML в таблицу MySQL
Добрый день, всем. Буду благодарен любой помощи в решении проблемы: суть проста, использую классический XML-парсер для получения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru