How to limit the content of XML feeds I save in an array?
有没有办法仍然利用所有的feed,而不是加载每个feed的25个post(或 来获得每个feed的前10个post?
1 2 3 4 5 6 7 8 9 10 11
| $feeds = array('',''); //a looot of inputs
$entries = array();
foreach ($feeds as $feed) {
$xml = simplexml_load_file($feed);
$xml->registerXPathNamespace('f', 'http://www.w3.org/2005/Atom');
$entries = array_merge($entries, $xml->xpath('/f:feed/f:entry | /rss/channel//item'));
} |
- @是asp而不是php的madflow
- @你可以说他指的是XPath,
- @如果我还是先加载所有源,那么madflow有什么作用吗?$xml = simplexml_load_file($feed);
- 对-对不起-我的观点是:这肯定已经被回答了。不过,这仍然是一个有趣的问题;)
- 你到底想加速什么?似乎您的方法将按顺序检索每个提要,而不是并行检索。
- 如何获取提要,将它们存储在数组中,然后切片数组php.net/manual/en/function.array-slice.php
- @黑帮我不知道…在数组中加载整个提要,然后对其进行切片,这不是一个双重过程/性能吗?这对输出有帮助吗?我更新了我的问题。
试试这个:
1 2 3 4 5 6 7 8
| $entries = array();
foreach ($feeds as $feed) {
$xml = simplexml_load_file($feed);
$xml->registerXPathNamespace('f', 'http://www.w3.org/2005/Atom');
$entries = array_merge($entries, $xml->xpath('/f:feed/f:entry[position() <= 10] | /rss/channel//item[position() <= 10]') );
} |
它使用position()。
- 即使这样,也会加载整个文档,但数组的大小会减小,对吗?这会加快速度吗?
- @Mtopia:我觉得有点,这取决于你读了多少个提要。但是,如果您只想部分加载XML文件(feeds),我认为您可能需要查看XMLReader。尽管我必须承认:我还没弄清楚它到底是如何工作的。但是,我相信它确实允许您做您想要做的事情:可以说,一个元素一个元素地读取一个XML流元素,而不是一次读取整个文档。
- 我在另一个我正在开发的应用程序中尝试过,但是速度太快了。
- @姆托皮亚:真的吗?六羟甲基三聚氰胺六甲醚。。。该应用程序是否有机会从其他服务器获取XML(我认为您当前的脚本也在这样做?)?这只是一个猜测,但我认为从另一台服务器上逐个元素地部分读取流确实会导致速度减慢。在本地文件系统流上,XMLReader可能比在外部流上更有用。但老实说,这只是一个有根据的猜测。别相信我的话。
- 不,它是从一个本地大文件中读取的。我读了一些关于它的基准,所以我试了一下。我测试了很多代码,但没有什么比simplexml更好的。