前段时间自学了使用php代码来实现相应的解析器,现在将其重点归纳一下。
**内容:
1.XML解析器介绍
2.SAX解析器的介绍及函数库的使用
3.使用SAX解析器对XML进行处理**
这里先来讲一下XML解析器的概念。它其实是一个程序,能够用来读取、解析和验证XML文档。XML解析器为程序员提供了二次开发的软件包,程序员通过调用其提供的函数接口,从而对XML文档执行各种操作。
如今各种主流的Web浏览器其实都包含内置的XML解析器,用来解析XML文档,以便在浏览器中以指定的格式输出XML文档。
在php中,有多种技术能够用来处理XML文档。例如SAX解析器、DOM解析器、SimpleXML解析器、XMLReader类库以及XSL处理函数。前四种用来读取和解析XML文档,同时完成对XML文档的有效性检验,而XSL处理函数用来转换XML文档,以便在浏览器上显示其内容。要在php中解析XML文档,需要在其代码中对解析器进行初始化,并调用其内置函数进行处理。
XML可分为两类:(1).基于事件驱动的XML解析器。(2).基于树的XML解析器。
对于前者,它在内存中不断处理XML数据和标签,一次处理一个。对于这类的解析器,当它遇到XML文档中任何XML元素或者数据时,它会产生一个事件,并调用相应的事件处理程序来进行处理。
这类解析器典型的代表有:SAX解析器。
SAX(Simple API for XML)解析器,它按照顺序处理XML文档,当它扫描到各类元素标签时,调用相应的处理程序(这些处理程序为程序员自己定义,也称之为回调函数)完成相应的处理,直至XML文档结束。
SAX解析器是把XML文档当成字符串进行处理,适合对一种元素进行重复处理。它的缺点也很明显,因为它是顺序处理的,并且在解析时,它并没有将整个XML文档装入内存中。因而,它不能随机读取任何一个元素,也不能实现复杂的搜索。对于内部结构交叉引用的文档,它处理起来比较吃力。
接下来,将分析SAX解析器的函数库:
1.创建新的XML解析器句柄
例如:
//对解析器进行初始化
$xparser=xml_parser_create("utf-8");
它的格式为 int xml_parser_create([string encoding])
enconding参数为解析后出去数据的编码,php5及其以上版本默认的值为UTF-8。
该函数执行成功会返回一个可被其他XML函数使用的XML解析器句柄。
2.注册元素的开始标签和结束标签的回调函数
例如:
//注册开始标签和结束标签的回调函数
xml_set_element_handler($xparser,"startHandler","endHandler");
第一个参数为XML解析器句柄,第二第三个参数分别为开始标签和结束标签的回调函数名,注册成功则返回TRUE,注册失败则返回FALSE。这两个回调函数都需要程序员自己定义。
例如:
开始标签的回调函数:
/**
* 开始标签的回调函数
* @param $xparser XML解析器语句句柄
* @param $element_name 元素名称
* @param $attributes 包含这个元素所有属性的关联数组,数组元素的下表为属性名称,元素的值为属性的值
*/
function startHandler($xparser,$element_name,$attributes){
if($element_name=="department"){
echo'<center><table border="1" cellpadding="0" cellspacing="0">';
}else if($element_name=="employee"){
echo'<tr>';
}else if($element_name=="name")
{ /**
*PHP的list()和each()函数访问数组变量
*/
list($key,$value)=each($attributes);
echo "<td&