我试图在 XMLReader迭代器 https://gist.github.com/hakre/5147685
的帮助下从URL读取XML文件$reader = new XMLReader();
$reader->open($filename);
$element = new XMLReaderNode($reader);
$it = new XMLElementIterator($reader, 'coupon');
$data = array();
$i = 0;
foreach($it as $index => $element) {
if( $i == 0 ) {
$xml = $element->asSimpleXML();
//print_r($xml->children());
foreach( $xml as $k=>$v ) {
$data[0][strtolower("{$k}")] = "{$v}";
}
}// End IF
}
print_r($data);
它与小文件一起工作正常,但是它花了很长时间从url读取xml文件。
我可以先从网址下载文件,然后阅读吗? 这是我正在做的正确的方式吗? 还有其他选择吗?
答案 0 :(得分:0)
如果我理解你的问题,那么下载大文件只需要很长时间。
但是你可以在本地缓存文件,首先从http-URI下载XML,然后将其存储到磁盘。
这在开发软件时非常有用,因为否则一直在执行远程请求以获取XML是一种不必要的开销,我认为数据不是 fresh 它更改为您的每个解析测试都需要在XML中进行这些更改。
我建议在Download File to server from URL:
的答案中做一些事情$filename = "http://someurl/file.xml";
$cachefile = "file.xml";
if (!is_readable($cachefile)
{
file_put_contents($cachefile, fopen($filename, 'r'));
}
$reader = new XMLReader();
$reader->open($cachefile);
这个小例子将创建$cachefile
,以防它不存在。如果确实存在,则不会再次下载。
因此加载该文件只需要一次。您也可以先下载XML文件,如果它非常大,支持简历(部分传输)的HTTP客户端,如wget
或curl
命令行实用程序,因为如果出现问题,转移,您不必再次下载整个文件。
然后您只需操作本地副本即可。您根本不需要更改代码,只需$filename
指向本地文件。