内容简介:如果想使用 PHP 解析 XML 的话,那么有如下多种选择:下面我以工作中遇到的一个解析自百万行 XML 的例子来对比一下 SAX 和 PULL 的用法:先看看用 SAX 的话怎么搞:
如果想使用 PHP 解析 XML 的话,那么有如下多种选择: Expat 、 DOM 、 SAX 、 PULL 。其中比较常用的是 DOM、SAX、PULL。如果要解析 XML 大文件的话,那么首先要排除的是 DOM,因为使用 DOM 的话,需要把整个文件全部加载才能解析,效率堪忧,相比较而言,SAX 和 PULL 属于流式解析,可以边加载边解析,至于这二者的区别,SAX 相对简单,不需要自定义什么,而 PULL 相对复杂,可以自定义解析整个过程。
下面我以工作中遇到的一个解析自百万行 XML 的例子来对比一下 SAX 和 PULL 的用法:
<certificates>
...
<certificate>
<domain>...</domain>
<id_status>...</id_status>
<official_site_status>...</official_site_status>
<business_status>...</business_status>
<host>...</host>
<auth_level>...</auth_level>
<sitename>...</sitename>
<sitetype>...</sitetype>
<phone>...</phone>
<auth_num>...</auth_num>
<nickname0>...</nickname0>
<icp>...</icp>
<is_certed>...</is_certed>
<is_official>...</is_official>
<existed_years>...</existed_years>
<addr>...</addr>
<type>...</type>
</certificate>
...
<certificates>
先看看用 SAX 的话怎么搞:
<?php
$values = simplexml_load_file('file.xml');
foreach ($values as $value) {
var_dump($value);
}
?>
在看看用 PULL 的话怎么搞:
<?php
$xml = new XMLReader();
$xml->open('file.xml');
for ($name = null, $value = []; $xml->read(); null) {
if ($xml->nodeType == XMLReader::ELEMENT) {
$name = $xml->name;
if ($name == 'certificate') {
if ($value) {
var_dump($value);
}
$value = [];
continue;
}
}
if ($xml->nodeType == XMLReader::TEXT) {
if ($name) {
$value[$name] = $xml->value;
}
}
}
?>
在本例中,PULL 的效率是 SAX 的两倍左右。
了解了相关知识,让我们看看如何选择合适的 XML 解析方法:如果规则比较复杂的话, 比如要查询当前节点的上下文,那么 DOM 是合理的选择;如果 XML 体积比较大的话,那么 SAX 和 PULL 是合理的选择,具体到这两者的话,对效率不是特别敏感的话,建议选择 SAX,因为它用起来更简单,否则选择 PULL。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- mybatis源码配置文件解析之三:解析typeAliases标签
- 安卓 so 文件解析详解
- perl解析pcap文件
- Nginx 源码:配置文件解析
- 要解析一个配置文件,当打开文件的时候我崩溃了
- 使用pdfminer解析pdf文件
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
UNIX网络编程 卷2
W.Richard Stevens / 人民邮电出版社 / 2009-11 / 89.00元
《UNIX网络编程 卷2:进程间通信(英文版·第2版)》是一部UNIX网络编程的经典之作。进程间通信(IPC)几乎是所有Unix程序性能的关键,理解IPC也是理解如何开发不同主机间网络应用程序的必要条件。《UNIX网络编程 卷2:进程间通信(英文版·第2版)》从对Posix IPC和System V IPC的内部结构开始讨论,全面深入地介绍了4种IPC形式:消息传递(管道、FIFO、消息队列)、同......一起来看看 《UNIX网络编程 卷2》 这本书的介绍吧!
图片转BASE64编码
在线图片转Base64编码工具
RGB HSV 转换
RGB HSV 互转工具