【发布时间】:2013-09-08 03:30:26
【问题描述】:
我有一个非常大的 RSS xml 文件,有 700 多个节点。 我正在使用XMLReader Iterator library 对其进行解析并将结果显示为每页 10 个。
这是我解析xml的示例代码:
<?php
require('xmlreader-iterators.php');
$xmlFile = 'http://www.example.com/rss.xml';
$reader = new XMLReader();
$reader->open($xmlFile);
$itemIterator = new XMLElementIterator($reader, 'item');
$items = array();
foreach ($itemIterator as $item) {
$xml = $item->asSimpleXML();
$items[] = array(
'title' => (string)$xml->title,
'link' => (string)$xml->link
);
}
// Logic for displaying the array values, based on the current page.
// page = 1 means $items[0] to $items[9]
for($i = 0; $i <= 9; $i++)
{
echo '<a href="'.$items[$i]['link'].'">'.$items[$i]['title'].'</a><br>';
}
?>
但问题是,对于每个页面,我都在解析整个 xml 文件,然后只显示相应的页面结果,例如:如果页面为 1,则显示 1 到 10 个节点,如果页面为 5 ,显示 41 到 50 个节点。
导致数据显示延迟。是否可以只读取与请求页面对应的节点?所以对于第一页,我可以从 1 到 10 个位置读取节点,而不是解析所有 xml 文件然后显示前 10 个节点。换句话说,我可以在解析 xml 文件时应用限制吗?
我遇到了 Gordon 的this answer,它解决了类似的问题,但它使用的是 SimpleXML,不建议将其用于解析大型 xml 文件。
【问题讨论】:
-
给出你的 xml 文件 URL
-
这是我的实际 XML 文件:oar.icrisat.org/cgi/exportview/subjects/s1=2E2/RSS2/s1=2E2.xml,其结构与 Yahoo 提要 URL 几乎相似:sports.yahoo.com/mlb/teams/bos/rss.xml
-
请检查我的答案
-
感谢您的所有回答。我觉得我需要在我的 Zend 的 Apache 服务器上增加 max_execution_time 和 memory_limit 的值。
标签: php xml xml-parsing xmlreader