2012-11-21 120 views
0

純粹缺乏合適的解決方案讓我瘋狂。將XML數據加載到MySQL 5.0中

客戶向我提供了一個14MB大小的XML文件,並且在將來的請求中可能會更大。我需要一個可以定期將其數據加載到MySQL表中的腳本。服務器正在運行MySQL 5.0.96,所以我不相信LOAD XML命令對我可用。

我曾嘗試使用PHP DOM庫解析XML文件,但Apache返回500內部服務器錯誤。我相信這是一個內存不足的問題,因爲我可以評論加載XML文件的PHP代碼並且腳本運行平穩(沒有數據)。服務器上的內存限制已經是128MB。

我也試過XMLReader,它似乎也是這麼做的。有什麼建議麼?

+0

是,XMLReader的可能是一個很好的路要走,但你的問題是什麼呢? – complex857

+0

當我嘗試使用Dom Lib或XMLReader加載此XML文件時,由於內存限制,服務器返回500內部服務器錯誤。有沒有更好的方法將XML與PHP相提並解? – Tanoro

+0

你試過python嗎?使用python很容易做這樣的事情 –

回答

0

XMLReader用作迭代器,因此您必須根據xml文檔的各個標記實現分組/提取邏輯。假設有像在XML文件中<row>對應於一個單一的元素插入它可能是這個樣子:

$reader = new XMLReader(); 
$reader->open('/path/to/the/file.xml'); 
while ($reader->read()) { 
    if ($reader->name == "row" && $reader->nodeType == XMLReader::ELEMENT) { 
     // the cursor currently at <row> element 

     // hopefully one fragment will fit into memory and you can use simplexml for easy access 
     // alternatively try $reader->expand() for DOMNode of the same thing 
     $rowxml = simplexml_load_string('<'.'?xml version='1.0'?'.'>'.$reader->readOuterXML()); 

     // build insert from the $rowxml object, run the query 
    } 
} 
$reader->close();