当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

17.5.5完整实例分析

9/17/2020 9:26:54 PM 人评论

17.5.5完整实例分析

17.5.5 完整实例分析

前面4小节介绍了分析XML的主要函数,这小节将通过一个具体实例使读者了解这些函数在PHP程序中的具体用法。这小节使用的XML文档就是在17.2小节创建的17-1.xml。

这节的实例程序将首先在PHP程序中初始化XML分析器,然后为不同的XML事件定义不同的处理器,最后分析XML文档。代码17-2是这个完整程序,如下所示。

代码17-2 使用Expat函数处理XML文档17-2.php


01 <?php

02 $parser=xml_parser_create();//初始化XML分析器

03

04 function start($parser,$elem_name,$elem_attrs)//在一个元素开始时调用的函数

05 {

06 switch($elem_name)

07 {

08 case"BOOKS":

09 echo"<b>--图书信息--</b><br/><br/>";

10 break;

11 case"TITLE":

12 echo"<b>书名:</b>";

13 break;

14 case"AUTHOR":

15 echo"<b>作者:</b>";

16 break;

17 case"PUBLISHER":

18 echo"<b>出版社:</b>";

19 break;

20 case"PRICE":

21 echo"<b>价格:</b>";

22 break;

23 }

24 }

25

26 function stop($parser,$elem_name)//在一个元素结束时调用的函数

27 {

28 echo"<br/>";

29 }

30

31 function char($parser,$data)//当找到一个字符数据时调用该函数

32 {

33 echo$data;

34 }

35

36

37 xml_set_element_handler($parser,"start","stop");//指定元素处理器

38 xml_set_character_data_handler($parser,"char");//指定字符数据处理器

39

40 $fp=fopen("17-1.xml","r");//打开XML文件

41 while($data=fread($fp,1024))//循环读入XML文件中的内容

42 {

43 xml_parse($parser,$data,feof($fp))or

44 die(sprintf("XML错误:%s at line%d",

45 xml_error_string(xml_get_error_code($parser)),

46 xml_get_current_line_number($parser)));

47 }

48

49 xml_parser_free($parser);//释放XML分析器资源

50 ?>


这段代码的执行结果如图17.7所示。

图 17-7 使用Expat函数处理XML文档的输出结果

【代码解析】下面对代码17-2的各个关键点加以解释。代码第2行,使用函数xml_parser_create()初始化一个XML分析器。代码第4行,建立函数star()用来当XML分析器找到一个元素开始时调用,这个函数内部通过判断作为参数传入的元素名称,来显示不同的文字。注意,判断元素名称时,元素名称用大写字母,无论XML文档中使用的是否是大写或小写字母。代码第26行,定义函数stop()在一个元素结束时调用,该函数仅仅用来向页面输出换行。代码第31行,定义函数char()在XML分析器找到一个字符数据时调用,该函数向页面输出这个字符数据。

接下来的代码就是实际的PHP处理XML函数。代码第37行,使用函数xml_set_element_handler()指定元素处理器,其第2个参数,就是代码第4行定义函数的名称start,以字符串形式传入函数xml_set_element_handler()。其第3个参数就是第26行定义的函数名称stop,同样是以字符串形式将函数名称“stop”传入函数xml_set_element_handler()。这样,当函数xml_set_element_handler()在处理XML元素开始和结束部分的时候就会分别调用程序自定义的函数start()和stop()。

代码第38行使用函数xml_set_character_data_handler()指定字符数据的XML处理器。同理,该函数也使用了自定义函数char()的名称“char”作为其第2个参数,这样当分析到一个XML字符数据时,就会调用函数char()来输出该字符数据。

代码第40行使用函数fopen()打开XML文件17-1.xml,接着在第43行调用函数xml_parse()分析读入的XML数据。同时,在分析XML出现错误时调用函数xml_error_string()和xml_get_current_line_number()分别获取错误信息和错误所在行。代码最后使用函数xml_parser_free()释放程序开始建立的XML分析器实例。

相关教程

共有条评论 网友评论

验证码: 看不清楚?