PHP中XML的应用

时间:2022-04-23 04:43:29

PHP中XML的应用

摘要:随着网络的普及,XML在电子商务和数据交换中扮演了越来越重要的角色,而PHP则一直在动态网页的设计中得到广泛应用,两者的结合具有重要的意义。该文通过对PHP语言的XML解析器的使用与编写XML操作类的两种方式进行论述,给出了在PHP中运用XML的解决途径。

关键词:PHP;XML;expat;类

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)26-1627-02

The Application of XML In PHP

XU Ning,FAN Yu-hui

(Huainan Normal University, Huainan 232001, China)

Abstract: With the popularization of Internet,XML acts as a more and more important role on E-commerce and data exchange. However,PHP has been used widely in dynamic Web-page design in a long time.Their combination becomes significant now. This page discusses in detail on the two kinds of method that the use of XML parse andwrite Xml Control class,and gives the solutions to make use of XML in PHP.

Key words: PHP; XML; expat; class

1 引言

随着网络的普及,XML在电子商务和数据交换中扮演了越来越重要的角色,而PHP则一直在动态网页的设计中得到广泛应用,两者的结合具有重要的意义。

XML是eXtensible Markup Language(可扩展的标注语言)的缩写,是一种W3C标准,主要用于Web应用程序和服务器之间实现容易的交互、数据的存储与使用。它是一整套定义语义标记的规则,这些标记将文档分成许多部件,并对这些部件加以标识。[1]它是当今最热门的技术之一,已在INTERNET世界被广泛接受和使用,成为数据交换的重要标准。

PHP(即Hypertext Preprocessor超文本预处理器)是一种HTML内嵌式的语言,其独特的语法混合了C、Java、Perl以及PHP式的新语法,可以比CGI或者Perl更快速地执行动态网页,已经成为一种得到广泛应用的服务器端脚本语言。它不仅在相当早的版本就开始支持XML,而且不断加强完善了这种支持。[2]

2 PHP对XML的处理

正确提取及有效识别XML文档中的数据,是进行XML文档数据后期处理的前提。这就需要对文档进行解析。应用程序必须通过XML解析器访问XML文档的结构和内容。一种语言对XML的支持往往起始于其内置XML解析机制的引入。

2.1 PHP中的XML解析器

在较低版本的PHP中就包含了一个基于SAX的XML解析接口,开始了对XML的支持;此后PHP4逐步增加了更好的XML支持,首先添加了DOMXML扩展模块和XSLT,后期在DOMXML扩展中也添加了其它一些功能,如HTML和DTD验证。PHP4所提供的是不稳定的而且是非W3C兼容的DOMXML扩展,这些扩展也存在不少需要修复的问题,始终处于不断修改中,因此未得到广泛的使用。正因为如此,在PHP5中,XML支持部分几乎被全部重新编写。PHP5的所有XML扩展都是基于GNOME项目的LIBXML2库,允许不同的扩展模块之间互相操作,开发者可以在同一个底层的库上进行开发。除了继承SAX解析器,PHP5还支持遵循W3C标准的DOM和基于LIBXSLT引擎的XSLT,同时还加人了PHP独有的SimpleXML,符合标准的SOAP扩展,有利于Web服务的应用。

2.2 PHP中expat解析器的功能

expat是PHP中的XML解析器,通过它可以使程序访问XML文档的结构和内容。expat把每个XML标签或者新一行代码当作事件的起始,而事件就是函数的触发器。用PHP解析XML的基本过程是:

创建XML解析器的一个实例;定义处理触发事件的函数;定义实际意义的数据处理程序;打开XML文件,读取文件数据并解析数据;关闭文件释放XML解析器。[3]

XML解析器的两种基本类型:

1) 基于树型的解析器:将XML文档转换成树型结构。这类解析器分析整篇文章,同时提供一个API来访问所产生树的每个元素。其通用的标准为DOM(文档对象模式)。

2) 基于事件的解析器:将XML文档视为一系列的事件。当一个特殊事件发生时,解析器将调用开发者提供的函数来处理。基于事件的解析器有一个XML文档的数据集中视图,这类解析器从头到尾处理文档,并将类似于“元素的开始”、“元素的结尾”、“特征数据的开始”等等事件通过回调(callback)函数报告给应用程序。[4]

不同于基于树型的解析器,基于事件的解析器不产生描述文档的结构。在CDATA项中,基于事件的解析器不会给出父元素greeting的信息。然而,它提供一个更底层的访问,这就使得可以更好地利用资源和更快地访问。expat就是这样的一种基于事件的解析器。但必要时它一样可以在PHP中生成完全的原生树结构。由于expat是一个不检查有效性的解析器,因此忽略任何与文档联系的DTD,但应要求文档的完整格式,否则expat将会随着出错信息而停止。作为不检查有效性的解析器,exapt的快速性和轻巧性使其十分适合互联网程序。

为了在PHP中使XML解析器有效,则需要一个支持XML的模块在web服务器上,因此要重新编译XML的模块。expat解析器通过在对XML文档进行解析的时候对不同的标记类型指定回调函数来完成的。当解析器开始解析XML文档并且遇上了一个标记,它将调用自定义函数,并且在继续往下执行之前由自定义函数对特定的标记进行处理。因此可以把它看作是一种事件驱动的方法。

3 编写类实现对XML操作

所谓类就是指由变量和作用于变量的函数组成的集合。通过有效的使用类,可以将描述同一对象的多个变量和函数组合在一起,作为一个整体使用,从而使编写出来的程序更直观,更合理,更易于维护。

3.1 XML操作类的编写

同样在PHP中也可以通过编写类来实现对XML文档的操作,编写一个类实现对XML文档的增加、修改、删除和查找等功能,在页面中对该类进行调用,可以轻松实现对XML文件的操作,以下编写一个类,实现对向XML文件中插入记录:

class OpXML

{private $fpath;

private $enter;

private $root;

function __construct($root,$fpath)

{$this->fpath=$fpath;

$this->root=$root;

$this->enter=chr(13).chr(10);

$this->checkFile();}

/*函数名:insert

*说明:插入一条记录*/

public function insert($fields)

{$content=$this->getFileContent();

preg_match_all('|<key>(\d+?)<\/key>|',$content,$matches);

rsort($matches[1]);

$newkey=$matches[1][0]+1;

$record='<record>'.$this->enter;

$record.='<key>'.$newkey.'</key>'.$this->enter;

foreach($fields as $k=>$v)

{$record.="<$k>$v</$k>".$this->enter;}

$record.='</record>'.$this->enter.$this->enter;

$this->save(preg_replace('/(?=<\/'.$this->root.'>)/',$record,$content));

return true;}}

3.2 XML操作类的调用

对于该类中其他函数的编写在此不一一赘述,下面通过一个例子来说明该类在XML文件操作中的使用:

include('./libs/x.class.php'); //OpXML类所在的文件

$rootname='ROOT';//根标签名

$fpath='test.xml';//文件的路径

$x=new OpXML('ROOT',$fpath);

$arr=array('username'=>'Tom','sex'=>'男', 'tel'=>'139999999', 'address'=>'北京');

$x->insert($arr);

4 结束语

上面介绍了XML在PHP中应用的两种方法,对比它们的实现方式,可以发现两种方法在实现对XML文件的操作上各自具有不同特点,PHP的XML解析器在使用上需要服务器、PHP版本等的支持,而编写XML操作类的方式则无需上述限制,可以很方便的实现。随着PHP新版本的不断推出,PHP的功能不断强大,对XML的支持也不断加强。本文中论述了PHP对XML文档处理的两种方式,给用户提供了多种可行方案。

参考文献:

[1] 王秋云.XML数据存储方法的研究[J].重庆科技学院学报(自然科学版),2007,(4):89-91.

[2] 李晰.脚本语言PHP的XML应用支持[J].计算机与数字工程,2007,(6):137-139.

[3] 刘小东.XML技术上传文件[J].中国ASP,2003,(2):27-34.

[4] 聂丹.探析PHP中XML的应用[J].山西电子技术,2006,(2):94-96.

上一篇:OLAP技术在税收数据分析中的应用 下一篇:J2EE软件开发模式探讨