PHP RSS提要阅读器效率

时间:2013-06-19 22:22:24

标签: php performance rss feed

我正在从XML Feed中读取数据,如下所示:

$data=file_get_contents("mydata.rss");

$data=simplexml_load_string($data);

foreach($data->channel->item as $item){ 

     $articles[] = array(
                    'description' => (string)$item->description,
                    'link' => (string)$item->link,
                    'pubDate' => (string)$item->pubDate,);

} 

问题是饲料很长,可能有100件。我只想读取前10个。我可以通过手动设置一个计数器然后在foreach循环中使用if语句解决这个问题,但我不认为这是最好的方法,因为整个提要仍然被读取因此是不必要的增加了开销。

如果不阅读整个Feed,最有效的方法是什么?

提前致谢...

1 个答案:

答案 0 :(得分:0)

正如您所说,使用SimpleXML,您将所有文件加载到内存中,然后对其进行解析。然后迭代内存中加载的元素。

使用类似SAX的解析器(如"XML Parser")将允许您不读取完整文件。我不知道究竟是如何实现的,但每次检测到新元素时,SAX中的aproach都会触发一个事件。然后,您可以开始阅读RSS并在“item”类型的第10个元素关闭时停止解析。

这种方法具有更小的内存占用并且速度更快。另一方面,迭代XML的元素并不容易。