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

本文介绍了一种使用PHP处理大型XML文件的有效方法。通过结合XMLReader和SimpleXML的优点,解决了XMLReader难以使用及SimpleXML无法处理大文件的问题。此方法先利用XMLReader逐条读取XML记录,再用SimpleXML解析每条记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

XML数据结构大概是这样子的:
图片描述

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

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

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

第二次导入的时候,我采用的方法是结合XMLReaderSimpleXML
因为不管你XML文件再怎么大,单条记录的数据能大到哪里去?(我说的是一般情况)

想到这个方法之后,于是代码就简洁到 我都不好意思发出来的程度了。
但是为了让这篇文章的读者 对这种简洁有个更直观的感受,我还是厚着脸皮发一下吧:

<?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 操作类 大文件”,这篇文章的思路应该就是你需要的。

### PHP伪协议 `string.rot13` 的用法 在PHP中,`string.rot13://` 是一种特殊的伪协议,用于对字符串执行ROT13编码。这是一种简单的替换加密方法,通过将字母表中的每个字符向后移动13位来实现编码和解码操作。 当使用此伪协议读取文件时,实际上是对给定的字符串进行了ROT13转换处理[^1]: ```php <?php $rot13_string = file_get_contents('string.rot13://Uryyb Jbeyq'); echo $rot13_string; // 输出 "Hello World" ?> ``` 这段代码展示了如何利用 `file_get_contents()` 函数配合 `string.rot13://` 来获取并显示经过 ROT13 编码后的文本[^2]。 ### PHP 变量覆盖技术 变量覆盖是指在一个程序运行期间改变已定义变量值的技术,在某些情况下可以用来测试或调试应用程序。然而需要注意的是,这种做法可能会带来安全风险,因此应当谨慎使用。 以下是几种常见的PHP变量覆盖方式: #### 使用GET/POST请求参数 如果脚本允许外部输入影响内部逻辑,则可以通过URL查询字符串或者HTML表单提交数据的方式修改服务器端设置好的默认值[^3]: ```php // 原始代码片段 $name = $_REQUEST['name'] ?? 'Guest'; // 用户可通过访问 http://example.com/?name=John 覆盖$name变量 ``` #### 利用环境变量 对于命令行界面(CLI)下的PHP应用来说,还可以借助操作系统级别的环境变量来进行配置项注入: ```bash export APP_ENV="production" php myscript.php ``` 此时可以在PHP代码里这样读取该环境变量并赋值给相应变量[^4]: ```php $env = getenv('APP_ENV') ?: 'development'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值