Есть ли способ не загружать весь канал, но только первый <item></item>
10 <item></item>
?
$feed = 'rss file'; $xml = simplexml_load_file($feed); //not the entire feed though
Нет. Парсер DOM (такой как SimpleXML) может загружать только весь документ.
Но вы можете использовать XPath для фильтрации соответствующих частей:
$xml = simplexml_load_file($feed); $top10 = $xml->xpath('/rss/channel/item[position() <= 10]'); foreach($top10 as $item) { // output $item; }
С помощью XMLReader вы можете достичь этого. Это позволяет избежать большого объема оперативной памяти.
$xmlr = new XMLReader(); $xmlr->open('path/to/file'); // ... // move the pointer with $xmlr->read(), $xmlr->next(), etc. to the required // elements and read them with simplexml_load_string($xmlr->readOuterXML()), etc. // ... $xmlr->close();