700 を超えるノードを持つ、かなり大きな RSS xml ファイルがあります。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 ファイル全体を解析してから、対応するページの結果を表示するだけであることです。 50 ノードまで。
データの表示に遅延が発生しています。要求されたページに対応するノードだけを読み取ることは可能ですか? したがって、最初のページでは、すべての xml ファイルを解析してから最初の 10 個のノードを表示する代わりに、1 から 10 の位置のノードを読み取ることができます。つまり、xml ファイルの解析中に制限を適用できますか?
同様の質問に対処するGordonのこの回答に出くわしましたが、SimpleXMLを使用しているため、大きなxmlファイルの解析にはお勧めできません。