Почему Perl XML :: RSS :: Parser жалуется на несоответствие конечных тегов?

Я полный новичок во всем этом, но некоторое время назад я написал небольшой скрипт на 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">

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

ОБНОВИТЬ:

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


person blast    schedule 09.01.2010    source источник


Ответы (3)


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

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

person Gavin Brock    schedule 09.01.2010
comment
Мы все видим одни и те же данные? Для меня строка 67 данных фида выглядит так: ‹title› ‹! [CDATA [Tylers Benefit Gig in help of Cystic Fibrosis - с Ребами]]› ‹/title› Возможно, версии perl / module отличаются - у меня есть: perl - MXML :: RSS :: Parser -e 'предупредить $ ^ V $ XML :: RSS :: Parser :: VERSION $ XML :: Elemental :: VERSION $ XML :: SAX :: VERSION' v5.10.0 4 2.11 0.96 at - e строка 1. - person Gavin Brock; 09.01.2010
comment
v5.10.0 4 2.11 0.96 тоже здесь, но я получаю сообщение об ошибке. Это действительно выглядит правдоподобно. - person Anonymous; 09.01.2010

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

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

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

person Anonymous    schedule 09.01.2010

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

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

person AmbroseChapel    schedule 09.01.2010