仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1705|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网站制作之用PHP东西包expat解析XML

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:20:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。xml   现在人人宣传XML是Web开辟者最好的伴侣,有了XML的协助,后者便可轻松地格局化和显示来自几近任何数据源的数据。然而,对静态内容而言,格局优秀的数据却还远远谈不上到达幻想形态。大多半的Web开辟者城市告知你,明天的收集上没有静态内容怎样能行!成绩是:“究竟该若何用XML创立静态内容呢?”


谜底是用静态内容处置言语来解析XML,好比用PHP或Perl等,从实际上说,这类法式言语是可以出于各类目标使用XML的。不过是采取一些能解析XML的东西包罢了。James Clark就供应了一种名叫expat的东西包。expat XML东西包用C言语解析XML,令PHP与XML轻松共舞。

PHP是一种专为Web设计的绝佳剧本言语。XML是暗示Web内容的尺度。二者联手真是要多美有多美!

上面我会给读者演示一个复杂的示例,经由过程这个例子便可申明若何用PHP把XML文档解析为HTML。然后我会引见一些PHP的其他XML概念。用PHP解析XML很复杂,操作起来很直不雅但却需求对细节有所注释。一旦真正把握了使用的方法,你一定会惊异本人怎样不早想到把它们俩拢一起来。


概述
PHP用expat这类XML东西包,经由过程C言语来解析XML。这个东西包的函数集同Perl XML解析所采取的函数集是一样的,另外,这类东西包仍是事务驱动型的解析器。这就是说,expat把每一个XML标签或新一行代码看成事务的肇端,而事务就是函数的触发器。Expat的装置十分复杂,假如你正在用着Apache Web办事器,那末你可以在PHP XML参考页上找到装置和下载指南。

用PHP解析XML的根基义务是如许的:起首,创立XML解析器的一个实例。接着,界说处置触发事务的函数,好比入手下手或停止标签等。随后,界说实践意义的数据处置法式。最初,翻开XML文件,读取文件数据并解析数据。以后封闭文件释放XML解析器。

你瞧,就像我说的那样,这套操作进程没甚么出格的。不外,在咱们会商详细的示例之前先懂得以下的一些警示:

Expat不合错误XML停止查验。这意味着只需XML文件格局准确――一切的元素嵌套妥当、入手下手和封闭标签没有任何毛病――它就会被解析。Expat可不论XML是不是恪守XML文件头中援用的尺度或界说。
Expat把XML标签全体转换为大写字母。假如你的剧本在标签名和其他内容上巨细写字母混用可就要当心了。
PHP是在magic quotes设置启用的情形下编译而成,那末庞杂的XML文件不会失掉准确的解析。如果magic quotes不是默许设置,你就当我没说。
好了,咱们如今就来看看有关的示例!



根基示例

为了把庞杂的工作复杂化,我在例子中省略了毛病反省和其他一些不用要的器材,固然,你可以在本人的代码为所欲为。我假定你早就熟习PHP及其语法,而我会对XML函数做一番注释。起首我会申明剧本法式的寄义,接着界说用户界说函数,实践上这些函数位于援用它们的代码之前。相干附件:法式清单A 所示为剧本的完全代码,剧本要解析的XML文档则是 相干附件:法式清单B。处置以后的输入了局如表A所示。

XML Articles

"Remedial XML for programmers: Basic syntax" In this first installment in a three-part series, I'll introduce you to XML and its basic syntax.

"Remedial XML: Enforcing document formats with DTDs" To enforce structure requirements for an XML document, you have to turn to one of XML's attendant technologies, data type definition (DTD).

"Remedial XML: Using XML Schema" In this article, we'll briefly touch on the shortcomings of DTDs and discuss the basics of a newer, more powerful standard: XML Schemas.

"Remedial XML: Say hello to DOM" Now it's time to put on your programmer's hat and get acquainted with Document Object Model (DOM), which provides easy access to XML documents via a tree-like set of objects.

"Remedial XML: Learning to play SAX" In this fifth installment in our Remedial XML series, I'll introduce you to the SAX API and provide some links to SAX implementations in several languages.



表A PHP解析XML的输入了局

起首我创立了XML解析器的一个实例:
$parser = xml_parser_create();

接着,我界说解析器遭受入手下手和停止标签时的操作。注重“startElement”和“endElement”是用户界说的函数,固然你可以依照本人的喜欢给它们起个其他名字,但我起的这些名字可是尺度的习气请求。
xml_set_element_handler($parser, “startElement”, “endElement”);

然后我界说了数据操作。这里的“characterData”也是用户界说的函数,名字也是习气性的。
xml_set_character_data_handler($parser, “characterData”);

如今翻开文件读取数据。你可以在这里入手下手编写毛病处置代码,我在例子中省略了这些毛病处置。不要忘了在剧本的开首界说$xml_file。
$filehandler = fopen($xml_file, “r”);

我入手下手读取文件内容,一次读4K字节并放在变量“$data”内直到文件末尾。我用xml_parse解析读取的这些数据段。
while ($data = fread($filehandler, 4096)) {
xml_parse($parser, $data, feof($filehandler));
}

最初停止清空、封闭文件和释放解析器等操作。
fclose($filehandler);
xml_parser_free($parser);

以上就是剧本中所用到的一切XML函数,上面我再详细注释下个中用到的3个用户界说函数,它们就是“startElement”、“endElement”和“characterData”。


只需xml_parse碰到<url>如许的入手下手标签,“startElement”函数就由XML解析器挪用,在咱们的例子中解析器就是$parser。该函数是必需界说的函数,它具有3个主动传递给它的参数:XML解析器实例、大写的元素称号,好比URL和该元素所具有的属性数组。在以上示例中,XML文件中的元素没有属性纠合,所以数组参数为空,但这个参数仍是必需存在的。

就这个例子而言,我决意在一个HTML表中显示我的XML数据。如上所示,出于简化的原因我没有编写毛病处置代码。这里我耍了个障眼法,由于我晓得XML文件中标签呈现的按次。不然我可以用“startElement”、“characterData”和“endElement”函数来界说数组,然后用独自的函数显示了局。

function startElement($parser_instance, $element_name, $attrs) {
switch($element_name) {
case “URL” : echo “<tr><td><a href=””;
break;
case “SUMMARY” : echo “<td>”;
break;
}
}


处置元素标签以后,xml_parse一旦碰到XML数据就会挪用“characterData”函数。这个函数也是由解析器主动挪用的,该函数需求两个参数,解析器实例和包括数据的字符串。
function characterData($parser_instance, $xml_data) {
echo $xml_data;
}

最初xml_parse遭受停止标签,运转“endElement”函数,该函数带两个参数,解析器实例和元素称号。
function endElement($parser_instance, $element_name) {
switch($element_name) {
case “URL” : echo “”>”;
break;
case “TITLE” : echo “</a></td>”;
break;
case “SUMMARY” : echo “</td></tr>”;
break;
}
}


用PHP解析XML的轻量熬炼到这里就停止了,上面咱们入手下手加些重活。

增添函数

PHP中还有其他一些同XML解析有关的函数。PHP.net文档对这些函数停止了完全的申明。我在这里提到了一些,你也许不久就会用到这些函数:

xml_set_default_handler()―该函数的任务体例和xml_set_character_data_handler()函数邻近,但它捕捉界说的一切。这个函数经常使用于文档类型声明掌握数据的处置。
xml_parser_set_option()―你可以用这个函数禁用字母的转大写操作或选择其他替换的字符编码集。
xml_parse_into_struct()―这个函数用来略过“startElement”、“characterData”和“endElement”函数的挪用,而把数据直接放进数组。
xml_error_string()―这个函数用来从xml_parser() 毛病中获得文本信息。
xml_get_error_code()―你可以用这个函数获得下面提到的毛病字符串。后两个函数的用法是如许的:if(!xml_parse($parser, $data, feof($filehandler))) { die(xml_error_string(xml_get_error_code($parser)); )
假如你感觉本人已上手,我建议你细心读读PHP手册页中供应的XML External Entity Example。这些例子提出了本文没有提到的其他一些概念和处置文件毛病的某些手艺。


小结
本文演示了PHP和XML的严密联合进程。两种手艺以Web为中间的天分促使它们结合起来成为静态内容所需的幻想处理计划。

  对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小写的区别。
金色的骷髅 该用户已被删除
沙发
发表于 2015-2-4 11:56:31 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
若相依 该用户已被删除
板凳
发表于 2015-2-9 22:29:08 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
活着的死人 该用户已被删除
地板
发表于 2015-2-11 20:09:42 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
简单生活 该用户已被删除
5#
发表于 2015-2-28 08:46:14 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
因胸联盟 该用户已被删除
6#
发表于 2015-3-9 21:48:35 | 只看该作者
爱上php,他也会爱上你。
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-10 17:36:44 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
不帅 该用户已被删除
8#
发表于 2015-3-17 08:14:48 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
飘灵儿 该用户已被删除
9#
发表于 2015-3-24 03:10:22 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
变相怪杰 该用户已被删除
10#
发表于 2015-4-5 11:48:34 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
11#
发表于 2015-4-10 09:50:35 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
山那边是海 该用户已被删除
12#
发表于 2015-4-16 09:44:28 | 只看该作者
做为1门年轻的语言,php一直很努力。
再现理想 该用户已被删除
13#
发表于 2015-4-28 22:15:19 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
莫相离 该用户已被删除
14#
发表于 2015-5-10 04:46:36 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
透明 该用户已被删除
15#
发表于 2015-6-4 02:11:30 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
飘飘悠悠 该用户已被删除
16#
发表于 2015-6-7 06:21:34 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
admin 该用户已被删除
17#
发表于 2015-7-5 00:48:17 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
乐观 该用户已被删除
18#
发表于 2015-7-6 19:52:02 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
分手快乐 该用户已被删除
19#
发表于 2015-7-7 17:44:47 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
海妖 该用户已被删除
20#
发表于 2015-7-10 17:01:26 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 21:03

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表