admin 管理员组文章数量: 1086019
2024年4月29日发(作者:assign和allocate)
维普资讯
第38卷(2oo7)第6期 计算机与数字工程 137
脚本语言PHP的XML应用支持
李昕
长沙410205) (湖南财经高等专科学校信息管理系
摘要探讨脚本语言PHP中对XML的应用支持,分析两种XML解析的PHP实现方式,即应用基于SAX的XML解
PHP XML Expm SAX DOM
TP312
析器Expat,应用Expand DOM类完成XML解析,表现PHP对XML应用支持的灵活性。
关键词
中图分类号
1 引言
XML(可扩展的标注语言)是一种W3C标准,
主要用于Web应用程序和服务器之间实现容易的
来处理。
在较低版本的PHP中就包含了一个基于SAX
的XML解析接口,开始了对XML的支持;此后
PHP4逐步增加了更好的XML支持,首先添加了
DOMXML扩展模块和XSLT,后期在DOMXML扩
展中也添加了其它一些功能,如HTML和DTD验
证。PHP 4所提供的是不稳定的而且是非w3c兼
交互、数据的存储与使用。它是一整套定义语义标
记的规则,这些标记将文档分成许多部件,并对这
些部件加以标识。它是当今最热门的技术之一,已
在INTERNET世界被广泛接受和使用,成为数据
交换的重要标准。
PHP(Hypertext Preprocessor超文本预处理器)
容的DOM XML扩展,这些扩展也存在不少需要修
复的问题,始终处于不断修改中,因此未得到广泛
的使用。正因为如此,在PHP5中,XML支持部分
几乎被全部重新编写。PHP5的所有XML扩展都
是基于GNOME项目的LIBXML2库,允许不同的
扩展模块之间互相操作,开发者可以在同一个底层
的库上进行开发。除了继承SAX解析器,PHP5还
支持遵循W3C标准的DOM和基于LIBXSLT引擎
的XSLT,同时还加入了PHP独有的SimpleXML,
符合标准的SOAP扩展,有利于Web服务的应用。
是一种HTML内嵌式的语言,其独特的语法混合
了C、Java、Perl以及PHP式的新语法,可以比CGI
或者Perl更快速地执行动态网页,已经成为一种
得到广泛应用的服务器端脚本语言。它不仅在相
当早的版本就开始支持XML,而且不断加强完善
了这种支持。
2 PHP对XML的支持
正确提取及有效识别XML文档中的数据,是
进行XML文档数据后期处理的前提。这就需要对
3 Expat功能分析
Expat是PHP脚本语言内置的XML解析器,
文档进行解析。应用程序必须通过XML解析器访
问XML文档的结构和内容。一种语言对XMI.的
支持往往起始于其内置XML解析机制的引入。
XML解析器有两种基本类型:(1)基于DOM
的解析器:将整个XML文档转换成内存中的DOM
树型结构,同时提供一个API来添加、编辑、移动或
删除树中的任意一个元素;(2)基于SAX的解析
它也被运用在其它开源项目中。它正是一种基于
SAX的解析器。这种解析器有一个针对XML文档
的数据集中视图,它关注的是XML文档的数据部
分,而不是其结构。这种解析器按照头到尾的顺序
处理文档,并将类似于元素头、元素尾、特征数据的
开始等一系列事件,通过回调函数报告给应用程
序。与基于DOM的解析器不同,基于SAX的解析
器并不需要描述被解析的XML文档的完整树型结
构。它提供了更底层的访问,可以更好地利用资源
器:将XML文档视为一系列的事件。当一个指定
事件发生时,解析器将调用开发者提供的相应函数
收到本文时间:2006年10月12日
基金项目:湖南省教育科学十一五规划课题(编号2006XJ150)资助
作者简介:李昕,女,副教授,研究方向:计算机网络、电子商务和数据库技术。
维普资讯
138 李昕:脚本语言PHP的XML应用支持 第38卷
和更快地访问。这种方式的明显优势就是无须将
整个XML文档都放入内存。l】
4 使用D0MXML
在PHP4可以使用DOMXML来操作XML数
据,但当时版本的DOMXML不符合W3C标准命
名,而且还出现过内存泄漏问题。PHP5中新的
DOM扩展是基于W3C标准完成的,包含方法和属
性名称。由于改用了新的标准,基于原来的
为了追求处理速度,Expat解析器并不检查
XML的有效性,它可以忽略XML文档相关的模式
文件如DTD,但仍然要求被解析XML文档格式必
须完整,否则与其他符合XML标准的解析器一样,
Expat也将会停止,并提交出错信息。正是由于不
检查有效性,快速和轻巧的Expat成为了非常适合
互联网运行的解析器。
Expat解析XML的基本过程包括五个步骤 :
(1)创建一个XML解析器实例;
(2)定义处理触发事件的函数;
(3)定义实际意义的数扼处理程序;
(4)打开XML文件,读取文件数据并解析
数据;
(5)关闭文件,释放XML解析器。
基于SAX的解析器在解析文档前通常要求注
册回调函数,以保证特定的事件发生时的正确调
用。Expat不处理例外事件,表1列举了它定义的
七个可能事件 :
表1 Expat的主要XML解析函数
各种回调函数都必须将解析器的实例作为其
第一个参数。例如开始元素的处理函数,就需要传
递三个参数,其脚本范例定义如下:
function start
—
element( parser,¥name,¥attrs)
这里第一个参数就是解析器实例标识,第二个
参数是开始元素的名称,第三参数为包含元素所有
属性和值的数组。用于产生XML解析器实例的函
数是xml—parser—crea ()。该实例将被用于以后
的所有函数。开始解 XML文档后,Expat在遇到
任何一个开始元素时,都将调刖已被定义好的start
—
element()函数,并将参数传近过去。
DOMXML的代码将不能直接运行,需要将加载函
数和保存函数进行修改,删除函数名中的下划线,
以及对其它各处进行必要的调节,但主体逻辑部分
可以保持不变 J。
4.1加载XML对象及访问节点
使用DOM来操纵XML对象,首先要创建一个
DomDocument对象,然后载入XML文件。XML对
象被加载到内存中成为DOM树后,PHP5提供了
很多方法来直接取得指定名称的元素,最便捷的就
是使用getElementsByTagName(¥tagname)。下列
代码即可遍历所有TagName为“title”的元素。
¥dom=new DomDocument();
¥dom一>load(“articles.xml”);
¥titles=¥dom一>getElementsByTagName(“title”);
foreach(¥titles as¥node){
print¥node一>textContent.“4\n”:
}
其中textContent属性虽不是W3C标准,但它
可以快速方便地读取一个元素的所有文本节点。
而遵循W3C的标准进行文本节点读取时,代码则
应改为:
¥node一>firstChild一>data:
4.2遍历所有指定节点
getElementsByTagName()返回一个Dom—
NodeList对象,而在PHP4中get—elements—by—tag-
n ̄tme()则返回一个数组,但该DomNodeList对象
仍可以使用foreach语句进行遍历,也可以直接使
用¥titles一>item(0)来访问结点。
在t)OM树中 另一个更复杂、更灵活的取得
所有指定元素的办法是从根结点遍历。
foreach f¥dom一>documentElement一>childNodes as
¥articles){
if f¥articles一>nodeType==1&&¥articles一>no—
deName==“item”){
foreach(¥articles一>childNodes as¥item){
if f¥item一>nodeType==1&&¥item一>nodeName
==
“title”){
print¥item一>textContent.“\n”;//对所有item一>
title元素进行操作}}}
维普资讯
第38卷(2007)第6期
}
计算机与数字工程
¥titlespace一>appendChild(¥titletext):
¥item一>appendChild(¥titlespaee):
139
4.3 xML元素的增删改操作
利用内存中已建成的DOM树处理XML对象,
除了能迅速读取和查询,同样也可以迅速进行增删
和改写操作。下面代码就是在channels.xml文件
中添加了一个新元素。
¥item=¥dom一>createElement(“item”);
¥title=¥dom~>createElement(“title”):
¥titleText=¥dom一>createTextNode f“new title
¥this一>documentElement一>appendChild(¥item):
¥dom:new Articles():
¥dom一>load(“articles.xml”):
¥dom一>addArtiele(“XML in PHP5”);
5 总结
采用Expat或扩展DOM类解析XML文档,将
分别获得来自SAX和DOM的优势。前者适于快
速、顺序、大量地处理XML数据对象,主要是速度
和内存耗用上的优势;后者适于对XML数据对象
text”);
¥title一>appendChild(¥titleText):
¥item~>appendChild(¥title);
¥dom~>documentElement一>getElementsByTagName
(“channel”)一>item(0)一>appendChild(¥item);
这里首先创建了一个item元素,一个title元
素和一个包含item标题的titleText文本结点,形成
三级层次;然后将所有的结点按层次结构链接起
来,把文本结点titleText加到title元素上,把title
元素加到item元素上,最后把item元素插人到
channel根元素上,在DOM树上添加一个节点的操
作就完成了。
而从DOM树中删除一个节点则更简单了:
¥dom~>documentElement一>RemoveChild(¥dom一
方便地进行各种复杂的加工操作,主要体现了操作
便捷的优势。
本文通过对PHP内置的两种xML文档解析
机制的剖析,反映了PHP对XML应用的全面而深
人的支持。以Web为中心的PHP对XML的支持
逐渐遵循了W3C标准,功能13益强大,互用协作性
增强。PHP5引入的SimpleXML扩展更提供了非
常简捷的XML文档访问方法,可以节省很多的代
码。XML在PHP中的应用支持已经非常全面,并
不断得到提升,其进一步发展值得期待。
参考文献
>documentElement一>getElementsByTagName(“channel”1
一
>item(0)):
4.4扩展DOM类
在PHP5中使用扩展DOM类的新特性,可以
书写可读性更强的代码。下面是用DOMDocument
类重新编写的添加节点的代码例子:
class Articles extends DomDocument{
function addArticle(¥title){
¥item=¥this一>createElement(“item”);
¥titlespace=¥this一>createElement(“title”);
¥titletext=¥this一>createTextNode(¥title);
[1]聂丹,XML在脚本语言PHP中的应用[J],丹东纺专学
报,2005(1):42—44
[2]刘小东,XML技术上传文件[J],中国ASP,2003(2):
27~34
[3]PHP的XML分析函数,http://www.ahaoz.corn/Article/
1/138/427,'2005/2005l1 1244856.html
[4]PHP5的XML新特性,http://www、wengu.conr/main/
Artiele/website/language/php/200603/
2n06
10659.shtml,
≯ s )
s )
(上接第119页)
super—peer组内super—peer间的负载平衡关系考
World Wide Web conference on Alternate track papel’s&
posters.May 2004
虑不多,这些都是以后继续研究的内容。
参考文献
[3]The JXTA website[EB].http://www.jxta.com
[4]孙帅,董小社等.基于三层P2P结构的网格资源发现模
型[J].微电子学与计算机.2005.8:】27—129
[5]Lei Guo etc.Exploiting Content Localities for Eficifent
Search in P2P Systems[J].Springer—Verlag GmbH.
Volume 3274/20o4
[1]周文莉,吴晓非.V2P技术综述[J].计算柳工程与设
计.2006.1:77—78
[2]Hsinping Wang.etc.Posters:Dynamic search in peer—to
—
[6]唐辉,张国杰等.一种混合P2P网络模型研究与设计
J].计算机应用.2005.3:522—524 peer networks[C].Proceedings of the 13th international
版权声明:本文标题:脚本语言PHP的XML应用支持 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1714370377a677137.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论