有沒有辦法加載整個飼料,但只有第一個10 <item></item>
標籤?SimpleXML可以只加載XML的一部分嗎?
$feed = 'rss file';
$xml = simplexml_load_file($feed); //not the entire feed though
有沒有辦法加載整個飼料,但只有第一個10 <item></item>
標籤?SimpleXML可以只加載XML的一部分嗎?
$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,你可以做到這一點。這避免了大量RAM的消耗。
$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();
我在以前的應用程序中嘗試過XMLReader,但速度的差異對於simpleXML來說是巨大的。 – EnexoOnoma
我試圖將它添加到我的xPath中的位置,但我沒有把它弄清楚。這就是:'array_merge($ entries,$ xml-> xpath('/ f:feed/f:entry |/rss/channel // item'));' – EnexoOnoma
這些命名空間項目('f:*')請參閱['registerXPathNamespace()'](http://php.net/manual/en/simplexmlelement.registerxpathnamespace.php) – Tomalak
我已經將命名空間設置爲'$ xml-> registerXPathNamespace('f','http:// www.w3.org/2005/Atom');'一切工作正常(我回應的內容,標題...)但我該如何修改我的xPath以包括'位置'? – EnexoOnoma