PHP4和PHP5版本下解析XML文档的操作方法实例分析


Posted in PHP onMay 20, 2017

本文实例讲述了PHP4和PHP5版本下解析XML文档的操作方法。分享给大家供大家参考,具体如下:

在PHP网站开发与建设过程中,时常会碰到需要对XML文档进行解析,PHP4版本自带了XML解析器(sax),PHP5版本增加了SimpleXML(基于dom)的XML扩展,对XML的解析更是非常方便,今天和大家分享下在不同环境下对XML文档进行解析的方法。

XML文档

<?xml version="1.0" encoding="gbk"?>
<LeapsoulXML>
<LeapsoulInfo>
<name>Leapsoul-PHP网站开发</name>
<website>https://3water.com</website>
<description>分享PHP网站开发与建设的乐趣,教你如何建立网站</description>
<bloger>David</bloger>
<date>2009-05-13</date>
<qq>QQ:154130270</qq>
</LeapsoulInfo>
<LeapsoulInfo>
<name>Leapsoul-PHP网站开发</name>
<website>https://3water.com</website>
<description>分享PHP网站开发与建设的乐趣,教你如何建立网站</description>
<bloger>David</bloger>
<date>2009-05-13</date>
<qq>QQ:154130270</qq>
</LeapsoulInfo>
</LeapsoulXML>

PHP5版本下SimpleXML的使用方法

$info=simplexml_load_file('leapsoulcn.xml');
print_r($info);
$name=$info->LeapsoulInfo[0]->name;
echo$name;
foreach($info->LeapsoulInfoas$LeapsoulInfo)
{
echo$LeapsoulInfo->name."<br />";
echo$LeapsoulInfo->website."<br />";
echo$LeapsoulInfo->description."<br />";
echo$LeapsoulInfo->bloger."<br />";
echo$LeapsoulInfo->date."<br />";
echo$LeapsoulInfo->qq."<br />";
}
foreach($info->xpath('//name')as$value){
echo$value.'<br />';
}
foreach($info->LeapsoulInfo[0]->children()as$value){
echo$value->getName();
echo$value.'<br />';
}
$info->LeapsoulInfo[0]->addChild('msn','MSN:davidfaithman@hotmail.com');
$info->asXML('leapsoulcn.xml');

代码注释

第1行:simplexml_load_file:读取一个xml文档作为操作对象,可以读取本地或者远程xml文档;simplexml_load_string:读取一个xml字符串作为操作的对象
第3行:如果不清楚如何获取某个节点的信息,可用print_r函数打印输出查看具体的结构,simplexml解析返回的对象具有数组结构。
第5~8行:以对象方式读取某个XML文档节点信息,读取方式:句柄->节点元素名->子节点,如果相同的节点元素有多个,则以数组(array)方式读取

注:由于simplexml解析返回的信息是UTF8格式的,如果网站使用的是GBK的,则需要转码,你可以使用iconv函数或者其他的utf8与gbk转换函数进行操作,如:$name = iconv('utf-8′,'gbk',$name);

第9~17行:以遍历的形式,读取所有元素下的子节点信息
第19~21行:simplexml的xpath函数是用来查询XML数据的,比如这里查询的是所有name节点的值
第23~26行:children函数是用来找寻某个特定节点下所有子节点的值。getName函数用来获得每个子节点的元素名称
第28~29行:addChild函数用来在某个特定节点下增加一个子节点;asXML函数对已做过改动的XML文档进行保存

点击查看更多SimpleXML函数说明。

PHP4版本自带的XML函数解析方法

function doStartElement($xmlParser,$name,$attr)
{
 //对开始元素的处理
}
function doEndElement($xmlParser,$name)
{
 //对结尾元素的处理
}
function doStringData($xmlParser,$data)
{
 //对元素间的字符数据的处理
}
$xmlObj = xml_parser_create("UTF-8");
xml_set_element_handler($xmlObj,"doStartElement","doEndElement");
xml_set_character_data_handler($xmlObj,"doStringData");
xml_parse($xmlObj,file_get_contents("leapsoulcn.xml"));
xml_parser_free($xmlObj);

代码注释

第1~15行:定义开始元素,结尾元素以及元素间字符数据的处理函数
第16行:建立一个新的XML解析器并返回可被其它XML函数使用的资源句柄,输入默认编码方式为 “ISO-8859-1”。同时,支持的编码方式还有“UTF-8”和 “US-ASCII”,输出数据编码方式是和xml_parser_create函数处定义相一致。
第18行:建立起始和终止元素处理器
第20行:建立字符数据处理器,处理元素之间的相关数据
注:XML语法解析器不会加上或者去掉任何空格,空格的取舍将由开发者自己决定。
第22行:启动解析器xml_parse函数第二个参数是字符型的,所以需要读取相关的XML文档信息,此处我用的是file_get_contents函数,本地远程都可行,当然你也可以使用fopen函数
第24行:XML解析完成后,释放解析器占用的内存

自带的XML函数解析思路

第一步:自定义开始元素,结尾元素以及元素间字符数据的处理函数;
第二步:建立一个XML解析器;
第三步:建立起始和终止元素处理器;
第四步:建立字符数据处理器,处理元素之间的相关数据;
第五步:启动解析器;
第六步:XML解析完成后,释放解析器占用的内存。

总结:

总的来说PHP自带的XML解析器使用起来相当繁琐,需要有较强的逻辑,而且如果XML文档结构不同,元素、字符等3个函数需要重新定义,而在PHP5版本增加了SimpleXML扩展后,XML解析起来非常简单,当然如果你需要进行更复杂的XML文档解析操作,你也可以下载安装并使用libxml,功能相当强。

PHP 相关文章推荐
用PHP实现多服务器共享SESSION数据的方法
Mar 16 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
Nov 01 PHP
php程序的国际化实现方法(利用gettext)
Aug 14 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
php中的mongodb select常用操作代码示例
Sep 06 PHP
ThinkPHP模板中数组循环实例
Oct 30 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
phpstorm编辑器乱码问题解决
Dec 01 PHP
php set_include_path函数设置 include_path 配置选项
Oct 30 PHP
PHP实现简单计算器小程序
Aug 28 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
Feb 10 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 PHP
PHP实现对xml的增删改查操作案例分析
May 19 #PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
May 19 #PHP
php简单处理XML数据的方法示例
May 19 #PHP
PHP jQuery+Ajax结合写批量删除功能
May 19 #PHP
php对xml文件的增删改查操作实现方法分析
May 19 #PHP
PHP基于自增数据如何生成不重复的随机数示例
May 19 #PHP
Yii2设置默认控制器的两种方法
May 19 #PHP
You might like
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
php 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
2016/05/26 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
python实现简单的TCP代理服务器
2014/10/08 Python
基于Python os模块常用命令介绍
2017/11/03 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
python圣诞树编写实例详解
2020/02/13 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
开会迟到检讨书
2014/01/08 职场文书
运动会广播稿100字
2014/09/14 职场文书
技术员岗位职责范本
2015/04/11 职场文书
抢劫罪辩护词
2015/05/21 职场文书