2011-10-02 57 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

相关问题