我有一个包含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
答案 0 :(得分:0)
那是不可能的。
您应该使用XMLReader导入大文件,如my blog post。
中所述答案 1 :(得分:0)
SimpleXML
是一个DOM解析器,这意味着它必须将整个文档加载到内存中才能构建整个XML数据集的内存中表示。分块数据不适用于这种类型的解析器。
要加载大型数据集,您必须切换到所谓的拉解析器 *,例如XMLReader
或非常低级XML Parser
扩展名。拉解析器通过逐个元素遍历XML文档来工作,并允许开发人员根据当前解析的元素做出反应。这减少了内存占用,因为一次只需要将小数据片段加载到内存中。使用pull解析器有点不常见,并不像熟悉的DOM解析器那样直观(DOM
和SimpleXML
)。
答案 2 :(得分:0)
非常高效的方式是
$data = preg_split('/(<|>)/m', $xmlFile);
之后,只需要一个周期。