这里有新鲜出炉的 PHP 面向对象编程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
这篇文章主要介绍了 PHP4 和 PHP5 版本下解析 XML 文档的操作方法, 结合实例形式分析了 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.phperz.com</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.phperz.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 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0809/339813.html