2010-09-13 63 views
0

我有一個很大的XML文件,其中有22000條記錄,我必須在我的數據庫中導入。php large 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 

這樣我可以繞過內存問題。

我的問題是如何在創紀錄的500點時加載XML文件

我的代碼很簡單

$data=simplexml_load_file($xmlFile); 

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

上面的代碼工作正常,1000-2000的記錄,但我想提到修改使用大型XML

+0

這可能與此問題有關:http://bugs.php.net/bug.php?id=38604 – halfdan 2010-09-13 10:40:20

回答

0

這是不可能的。

您應該使用XMLReader導入大文件,如my blog post中所述。

0

SimpleXML是一個DOM解析器,這意味着它必須將整個文檔加載到內存中才能夠構建整個XML數據集的內存表示。分塊數據不適用於這種類型的分析器。

要裝入大,必須切換到所謂的拉解析器 * S如XMLReader例如或者非常低的水平XML Parser擴展XML數據集。 Pull解析器通過逐元遍歷XML文檔元素來工作,並允許開發人員根據當前已解析的元素作出反應。這減少了內存佔用量,因爲一次只能將一小部分數據加載到內存中。使用pull解析器有點不常見,並且不如熟悉的DOM解析器(DOMSimpleXML)那麼直觀。