因为工做缘由,不得不与一个二逼团队合做,
我说直接导出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