1

在这一切方面我完全是个菜鸟,但前一段时间我用 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)。我尝试重新安装模块,但这似乎并没有改变任何东西。

4

3 回答 3

1

刚刚为我工作。也许 RSS 提要中的 XML 已经损坏了一段时间?该错误似乎指向指示行中提要中未匹配的标签。

如果它仍然发生,请尝试使用 curl(或类似的)来显示原始 XML 并检查它是否有错误。

于 2010-01-09T14:02:23.543 回答
1

我在全新安装 XML::RSS::Parser 及其使用的模块时遇到相同的错误(相同的消息和行号)(它只是 XML::Elemental 上提要结构的包装器,它使用 XML:: SAX 解析等)。

但是,Firefox 表明该文件是有效的。

XML::Tiny 似乎能够解析文件,因此只需进行一些工作即可对其进行转换。

于 2010-01-09T14:09:42.820 回答
0

您需要查看实际来源以了解发生了什么。不仅仅是“在浏览器中访问网站”,而是查看程序看到的实际源代码。谁知道发生了什么?某种故障,只发送了一半的文件?因为不是同一个客户端而发送了不同的源?

每次程序运行时,我都会转储 XML,并在出现错误时对其进行检查。

于 2010-01-09T23:05:56.687 回答