读取部分XML文件

时间:2014-05-06 11:34:45

标签: php xml xmlreader

我试图在 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文件。

我可以先从网址下载文件,然后阅读吗? 这是我正在做的正确的方式吗? 还有其他选择吗?

1 个答案:

答案 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客户端,如wgetcurl命令行实用程序,因为如果出现问题,转移,您不必再次下载整个文件。

然后您只需操作本地副本即可。您根本不需要更改代码,只需$filename指向本地文件。