SimpleXML可以只加载XML的一部分吗?
问题描述:
有没有办法加载整个饲料,但只有第一个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();
+0
我在以前的应用程序中尝试过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