0

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

$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 语句来解决这个问题,但我认为这不是最好的方法,因为整个提要仍然被读取,因此是不必要的增加了开销。

在不阅读整个提要的情况下实现这一目标的最有效方法是什么?

提前致谢...

4

1 回答 1

0

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

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

这种方法内存占用更小,速度更快。另一方面,遍历 XML 的元素并不容易。

于 2013-06-19T22:56:05.730 回答