Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 部分读取XML文件_Php_Xml_Xmlreader - Fatal编程技术网

Php 部分读取XML文件

Php 部分读取XML文件,php,xml,xmlreader,Php,Xml,Xmlreader,我试图在XMLReader迭代器的帮助下从URL读取XML文件 它可以处理小文件,但从url读取xml文件需要很长时间 我可以先从url下载文件,然后再读取它吗? 我这样做对吗? 还有其他选择吗?如果我没弄错你的问题,下载这个大文件需要很长时间 但是您可以在本地缓存该文件,方法是首先从http URI下载XML,然后将其存储到磁盘 这在您开发软件时非常有用,因为否则一直执行远程请求来获取XML是一种不必要的开销,我假设数据不是那么新鲜,它在您的每个解析测试中都会发生更改,您需要在XML中进行这些

我试图在XMLReader迭代器的帮助下从URL读取XML文件

它可以处理小文件,但从url读取xml文件需要很长时间

我可以先从url下载文件,然后再读取它吗? 我这样做对吗?
还有其他选择吗?

如果我没弄错你的问题,下载这个大文件需要很长时间

但是您可以在本地缓存该文件,方法是首先从http URI下载XML,然后将其存储到磁盘

这在您开发软件时非常有用,因为否则一直执行远程请求来获取XML是一种不必要的开销,我假设数据不是那么新鲜,它在您的每个解析测试中都会发生更改,您需要在XML中进行这些更改

我建议按照以下答案做一些事情:

这个小示例将创建$cachefile,以防它不存在。如果它确实存在,则不会再次下载

因此,加载该文件只需一次时间。如果XML文件非常大,并且有一个HTTP客户机支持恢复部分传输,比如wget或curl命令行实用程序,那么您也可以首先下载该XML文件,因为如果传输出现问题,您不必再次下载整个文件


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

您想从URL下载XML文件,然后使用XMLReader对其进行迭代,对吗?因为你的标题说明了一些不同的东西,而这正是你的文本所要求的。有一次我用它将65000个产品导入到我的应用程序中。我使用了Regexp,工作得很好。@mohebifar1。Botteleneck似乎正在下载XML文件,而不是从XML 2中提取信息。在这里重新发明方轮听起来不太聪明,是吗。他正在谈论解析xml的缓慢性。我给了他一条路。2.也许这个轮子不适合他\XMLReader从文档生成完整的层次结构树。有时,这对于用户来说是不必要的,并且它有额外的过载。例如,如果他只是在寻找s,那么解析包含和额外标记的整个文档需要更多的时间,比如,,…@AndreschSerj,现在我正在从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);
$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);