xml是一种描述数据结构的方法,在xml中没有预定义的标签,所有的标签都是自定义的。
如<name> yeetrack</name>就是非常简单的一段xml语句。处理xml文件需要xml解释器,有两种xml解释器,一种是基于树的解释器,它分析整篇xml文档,将xml文档转换成树形结构,并提供api来访问树的节点;另一种是基于事件的解释器,将xml文档看做一系列的事件,当遇到某个事件时,调用相应的函数来处理,有点类似java里的事件action和listener。
expat是基于事件的解释器,基于事件的解释器更注重文件的内容,所以能更快的访问数据。<name>yeetrack</name>,基于事件的解释器会将这段代码报告成三个事件:
① name:开始元素
② yeetrack:Data部分
③ name:结束元素
xml expat在php中已经集成,直接使用即可。如有下面的data.xml文档:
<?xml version="1.0" encoding="ISO-8859-1"?> <yeetrack> <title>yeetrack</title> <domain>www.yeetrack.com</domain> <content>The security of network</content> </yeetrack>
下面来编写解释器代码:
<?php //初始化xml解释器 $parser=xml_parser_create(); //编写开始元素解释器,当遇到开始元素时,解释器调用该函数 function start($parser,$element_name,$element_value) { switch($element_name) { case "yeetrack": echo "----yeetrack---- "; break; case "title": echo "Title: "; breadk; case "domain": echo "Domain: "; break; case "content": echo "Content: "; break; } } //编写结束元素解释器,当遇到结束元素时,解释器调用该函数 function stop($parser,$element_name) { echo " "; //这里只打印一个回车 } //编写Data元素解释器,当遇到Data元素时,解释器调用该函数 function data($parser,$element_value) { echo $element_value; } //指定元素handler xml_set_element_handler($parser,"start","stop"); //指定数据handler xml_set_character_data_handler($parser,"data"); //打开xml文件 $fp=fopen("data.xml","r"); //读取xml数据 while($value=fread($fp,4096)) { xml_parse($parser,$value,feof($fp)) or die (sprintf("xml错误: %s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } //释放xml解释器 xml_parser_free($parser); ?>
将上面代码保存成php文件,放在apache目录下,直接访问,即可读取当前目录下的data.xml文件的内容。
版权声明
本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。
© 空空博客,本文链接:https://www.yeetrack.com/?p=103
近期评论