php xml expat解释器

       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