我有一个非常大的 RSS xml 文件,有 700 多个节点。我正在使用XMLReader Iterator 库对其进行解析并将结果显示为每页 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的这个回答,它解决了一个类似的问题,但它使用的是 SimpleXML,不推荐用于解析大型 xml 文件。