我正在从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,最有效的方法是什么?
提前致谢...
答案 0 :(得分:0)
正如您所说,使用SimpleXML,您将所有文件加载到内存中,然后对其进行解析。然后迭代内存中加载的元素。
使用类似SAX的解析器(如"XML Parser")将允许您不读取完整文件。我不知道究竟是如何实现的,但每次检测到新元素时,SAX中的aproach都会触发一个事件。然后,您可以开始阅读RSS并在“item”类型的第10个元素关闭时停止解析。
这种方法具有更小的内存占用并且速度更快。另一方面,迭代XML的元素并不容易。