SAX方式解析XML
<?php
header("Content-Type:text/html;charset=utf-8");
//创建XML解析器
$parser = xml_parser_create('utf-8');
//规定如何让处理我们遇到的标签和数据
/*
参数1,当前解析器
参数2,开始标签处理函数
参数3,结束标签处理函数
*/
xml_set_element_handler($parser,'start_element','end_element');
/*
参数1,解析器
参数2,开始标签名
参数3,属性名
*/
function start_element($parser,$name,$attr){
echo '开始标签'.$name.'<br/>';
echo '属性:'.$attr[ID].'<br>';
}
/*
参数1,解析器
参数2,结束标签名
*/
function end_element($parser,$name){
echo '结束标签'.$name.'<br/>';
}
/*
处理数据
参数1,解析器资源
参数2,数据处理器名称
*/
xml_set_character_data_handler($parser,'data_process');
/*
数据处理器
参数1,当前解析器
参数2,数据内容
*/
function data_process($parser,$data){
echo $data."<br>";
}
/*
开始解析之前,需要读入xml文件的内容,解析器处理的是文件的内容不是文件,所以需要先通过文件处理函数获得文件的内容
*/
$xml_data = file_get_contents('bookshelf.xml');
/*
开始解析:
参数1,解析器
参数2,解析的数据
参数3,告诉解析器是否为最后一个数据()否则解析器会继续等待
*/
xml_parse($parser,$xml_data,true);
//处理错误
if($res){
echo "处理成功";
}else{
//失败,处理错误
var_dump(xml_get_error_code($parser));
var_dump(xml_get_current_line_number($parser));
var_dump(xml_get_current_column_number($parser));
var_dump(xml_error_string(xml_get_error_code($parser)));
}