因爲工做緣由,不得不與一個二逼團隊合做,
我說直接導出SQL文件給我就行了,而他們堅持要導出XML文件。
或者他們有他們的緣由吧,但我仍是要叫他們二逼團隊,懶得了解他們有什麼苦衷。php
我想MySQL應該是支持導入XML的話,搜索的結果是什麼我忘了。
反正我最後決定仍是本身寫一段PHP來生成SQL語句。node
XML數據結構大概是這樣子的:
數據庫
文件很大,有不少<object>
,也就是不少記錄,可是單個記錄裏的數據並不大。數據結構
PHP裏關於XML的操做有不少類和函數。
詳見:http://php.net/manual/zh/refs.xml.php
其中經常使用的應該是XMLReader
、SimpleXML
(純屬我的感受,並無數據支持)XMLReader
是以文件流的方式 一句一句讀取,主要用來處理體積很大的XML文件,但用起來比較麻煩。SimpleXML
用起來則便捷了許多,但它沒辦法處理很大的XML數據。函數
剛開始我只用XMLReader
來導入,固然也是能夠導入的,可是嵌套了好幾層循環和判斷。
要不是後來又要導入一批數據,我幾乎覺得只能這樣寫了。spa
第二次導入的時候,我採用的方法是結合XMLReader
和SimpleXML
,
由於無論你XML文件再怎麼大,單條記錄的數據能大到哪裏去?(我說的是通常狀況).net
想到這個方法以後,因而代碼就簡潔到 我都很差意思發出來的程度了。
可是爲了讓這篇文章的讀者 對這種簡潔有個更直觀的感覺,我仍是厚着臉皮發一下吧:code
<?php $xml = new XMLReader(); $xml->open(__DIR__ . '/company.xml'); while($xml->read()) { if($xml->name=='object' and $xml->nodeType==XMLReader::ELEMENT) { // 進入 object $inXml = $xml->readOuterXML(); // 獲取當前整個 object 內容(字符串) $inXml = simplexml_load_string($inXml); // 轉換成 SimpleXMLElement 對象 // 而後沒有了 就這麼簡單 具體怎麼保存到數據庫 dump 一下 $inXml 你就懂了 var_dump($inXml); } // 繼續讀取 直到進入下一個 object }
就是這樣了,若是你還在爲XMLReader
太難用,SimpleXML
搞不定大文件,而苦苦搜尋「php xml 操做類 大文件」,這篇文章的思路應該就是你須要的。xml