2011-10-02 27 views

回答

4

不。DOM解析器(如SimpleXML)只能加載整個文檔。

但是你可以使用XPath來過濾相關部分:

$xml = simplexml_load_file($feed); 
$top10 = $xml->xpath('/rss/channel/item[position() <= 10]'); 

foreach($top10 as $item) { 
    // output $item; 
} 
+0

我試圖將它添加到我的xPath中的位置,但我沒有把它弄清楚。這就是:'array_merge($ entries,$ xml-> xpath('/ f:feed/f:entry |/rss/channel // item'));' – EnexoOnoma

+0

這些命名空間項目('f:*')請參閱['registerXPathNamespace()'](http://php.net/manual/en/simplexmlelement.registerxpathnamespace.php) – Tomalak

+0

我已經將命名空間設置爲'$ xml-> registerXPathNamespace('f','http:// www.w3.org/2005/Atom');'一切工作正常(我回應的內容,標題...)但我該如何修改我的xPath以包括'位置'? – EnexoOnoma

2

隨着使用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(); 
+0

我在以前的應用程序中嘗試過XMLReader,但速度的差異對於simpleXML來說是巨大的。 – EnexoOnoma

相關問題