Почему Perl XML :: RSS :: Parser жалуется на «несоответствие конечного тега»? - PullRequest
1 голос
/ 09 января 2010

Я полный нуб во всем этом, но некоторое время назад я написал небольшой скрипт на Perl для разбора RSS-канала. Это начинается так:

use strict;
use XML::RSS::Parser;
use Data::Dumper;
my $url = "http://www.livenation.co.uk/Venue/159/Southampton-Guildhall-tickets/RSS";
my $parser = XML::RSS::Parser->new();
my $feed = $parser->parse_uri($url);
print Dumper( $feed );
print $parser->errstr();

Раньше он работал (не помню, когда я последний раз проверял его, но несколько недель назад он, казалось, работал), но сегодня он больше не работает. Канал RSS активен и проходит через feedvalidator.org. errstr() возвращает это:

End tag mismatch (title != description) [Ln: 67, Col: 95]

Я не совсем уверен, как это произошло или что это значит. Источник RSS гласит:

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

Я не знаю, было ли это иначе. Я попробовал несколько других каналов атома, и парсер, кажется, ломает их всех. Проблема в том, что сисадмин не вернулся до истечения срока, поэтому я должен использовать то, что доступно.

UPDATE:

интересно. он ломается как на моем w7 64 * active perl), так и на ubuntu (32, 9.10). работает хорошо на Ubuntu моего друга, хотя (то же самое, 9.10). Я попытался переустановить модули, но это ничего не меняет.

Ответы [ 3 ]

1 голос
/ 09 января 2010

Я получаю ту же ошибку (с тем же сообщением и номером строки) при новой установке XML :: RSS :: Parser и используемых им модулей (это просто оболочка для структуры каналов через XML :: Elemental, которая использует XML :: SAX для анализа и т. Д.).

Firefox, однако, указывает, что файл действителен.

XML :: Tiny, кажется, способен анализировать файл, так что этого может быть достаточно, если немного поработать над его преобразованием.

1 голос
/ 09 января 2010

У меня работает только сейчас. Возможно, в RSS-канале какое-то время содержался плохой поврежденный XML? Ошибка указывает на несоответствующие теги в ленте в указанной строке.

Если это все еще происходит, попробуйте использовать curl (или аналогичный) для отображения необработанного XML и проверить его на наличие ошибок.

0 голосов
/ 10 января 2010

Вам нужно посмотреть на фактический источник, чтобы увидеть, что происходит. Не просто «перейти на сайт в браузере», но посмотреть на фактический источник, который видит программа. Кто знает, что случилось? Какой-то глюк, когда только половина документа была отправлена? Другой источник отправлен, потому что это не тот же клиент?

Я буду делать дамп XML каждый раз при каждом запуске программы и проверять его при наличии ошибок.

...