资讯专栏INFORMATION COLUMN

另辟蹊径 搞定PHP读取XML大文件 数据导入

Winer / 3509人阅读

摘要:由于工作原因,不得不与一个二逼团队合作,我说直接导出文件给我就好了,而他们坚持要导出文件。或者他们有他们的原因吧,但我还是要叫他们二逼团队,懒得了解他们有什么苦衷。

由于工作原因,不得不与一个二逼团队合作,
我说直接导出SQL文件给我就好了,而他们坚持要导出XML文件。
或者他们有他们的原因吧,但我还是要叫他们二逼团队,懒得了解他们有什么苦衷。

我想MySQL应该是支持导入XML的话,搜索的结果是什么我忘了。
反正我最后决定还是自己写一段PHP来生成SQL语句。

XML数据结构大概是这样子的:

文件很大,有很多,也就是很多记录,但是单个记录里的数据并不大。

PHP里关于XML的操作有很多类和函数。
详见:http://php.net/manual/zh/refs.xml.php
其中常用的应该是XMLReaderSimpleXML(纯属个人感觉,并没有数据支持)
XMLReader是以文件流的方式 一句一句读取,主要用来处理体积很大的XML文件,但用起来比较麻烦。
SimpleXML用起来则便捷了许多,但它没办法处理很大的XML数据。

刚开始我只用XMLReader来导入,当然也是可以导入的,但是嵌套了好几层循环和判断。
要不是后来又要导入一批数据,我几乎以为只能这样写了。

第二次导入的时候,我采用的方法是结合XMLReaderSimpleXML
因为不管你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 操作类 大文件”,这篇文章的思路应该就是你需要的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21107.html

相关文章

  • 另辟蹊径 搞定PHP读取XML文件 数据导入

    摘要:由于工作原因,不得不与一个二逼团队合作,我说直接导出文件给我就好了,而他们坚持要导出文件。或者他们有他们的原因吧,但我还是要叫他们二逼团队,懒得了解他们有什么苦衷。 由于工作原因,不得不与一个二逼团队合作,我说直接导出SQL文件给我就好了,而他们坚持要导出XML文件。或者他们有他们的原因吧,但我还是要叫他们二逼团队,懒得了解他们有什么苦衷。 我想MySQL应该是支持导入XML的话,搜索...

    zhaochunqi 评论0 收藏0
  • Growth Hacker 奇技淫巧一则:零授权,抓取新浪微博任何用户的微博内容

    摘要:由于我需要获取普通用户的微博内容,因此还要想办法继续绕。默认是勾上的,也即是说微博团队主观上是希望用户勾上这个,从而借助判断来提高登录安全性的。我遂果断取消勾选该选项,输入任何一个自己的微博账号密码,点击登录。 有时或基于以下凡此种种需求,我们会想要去抓取新浪微博的内容: 产品冷启动,导入外部数据,而非从头积累; 通过大数据+语义分析获取用户兴趣行为偏好,提供智能推荐; 监控微博舆...

    wpw 评论0 收藏0
  • Growth Hacker 奇技淫巧一则:零授权,抓取新浪微博任何用户的微博内容

    摘要:由于我需要获取普通用户的微博内容,因此还要想办法继续绕。默认是勾上的,也即是说微博团队主观上是希望用户勾上这个,从而借助判断来提高登录安全性的。我遂果断取消勾选该选项,输入任何一个自己的微博账号密码,点击登录。 有时或基于以下凡此种种需求,我们会想要去抓取新浪微博的内容: 产品冷启动,导入外部数据,而非从头积累; 通过大数据+语义分析获取用户兴趣行为偏好,提供智能推荐; 监控微博舆...

    DevWiki 评论0 收藏0
  • PHP回顾之IO

    摘要:命令行时返回值为,标准输入输出均指向终端可用进程号查看。会在脚本执行完毕后关闭三个流,无需用户手动关闭。与远程网址交互是一个请求和响应的过程,其中细节可参考本人之前的文章回顾之请求和回顾之响应,也可参考协议的权威文档。 转载请注明文章出处: https://tlanyan.me/php-review... PHP回顾系列目录 PHP基础 web请求 cookie web响应 ses...

    happen 评论0 收藏0
  • 搞定PHP面试 - MySQL基础知识点整理 - 存储引擎

    摘要:支持崩溃后的安全恢复。的使用场景更新密集的表存储引擎特别适合处理多重并发的更新请求。外键约束支持外键的存储引擎只有。引擎是及之前版本的默认存储引擎。文件存储表的索引。引擎存储引擎是引擎的变种。 MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...

    lmxdawn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<