php large xml用分页解析它

时间:2010-09-13 10:32:52

标签: php xml import

我有一个包含22000条记录的大型XML文件,我必须在我的数据库中导入。

我正在寻找如何用分页解析xml,意思是

parse.php?start=0; //this script get the 0-500 firt records of file
parse.php?start=500 //this script get the 500-1000 records of file

这样我可以绕过内存问题。

我的问题是如何在加载xml文件时指向记录500

我的代码很简单

$data=simplexml_load_file($xmlFile);

foreach ($data->product as $product) {
   foreach($product->children() as $section) {
       addToDB($section);
   }
}

上面的代码适用于1000-2000条记录,但我想按照提到的方式修改以处理大型XML

3 个答案:

答案 0 :(得分:0)

那是不可能的。

您应该使用XMLReader导入大文件,如my blog post

中所述

答案 1 :(得分:0)

SimpleXML是一个DOM解析器,这意味着它必须将整个文档加载到内存中才能构建整个XML数据集的内存中表示。分块数据不适用于这种类型的解析器。

要加载大型数据集,您必须切换到所谓的拉解析器 *,例如XMLReader或非常低级XML Parser扩展名。拉解析器通过逐个元素遍历XML文档来工作,并允许开发人员根据当前解析的元素做出反应。这减少了内存占用,因为一次只需要将小数据片段加载到内存中。使用pull解析器有点不常见,并不像熟悉的DOM解析器那样直观(DOMSimpleXML)。

答案 2 :(得分:0)

非常高效的方式是

$data = preg_split('/(<|>)/m', $xmlFile);

之后,只需要一个周期。