当前位置:首页 > PHP教程 > PHP高级教程

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

本文实例讲述了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>http://www.jb51.net</website> <description>分享php网站开发与建设的乐趣,教你如何建立网站</description> <bloger>david</bloger> <date>2009-05-13</date> <qq>qq:154130270</qq> </leapsoulinfo> <leapsoulinfo> <name>leapsoul-php网站开发</name> <website>http://www.jb51.net</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,功能相当强。

ps:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

在线xml/json互相转换工具:
http://tools.jb51.net/code/xmljson

在线格式化xml/在线压缩xml:
http://tools.jb51.net/code/xmlformat

xml在线压缩/格式化工具:
http://tools.jb51.net/code/xml_format_compress

xml代码在线格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat

更多关于php相关内容感兴趣的读者可查看本站专题:《php针对xml文件操作技巧总结》、《php数组(array)操作技巧大全》、《php字符串(string)用法总结》、《php错误与异常处理方法总结》、《php基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家php程序设计有所帮助。



【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!