用SAX解析XML

来源:互联网 发布:怎么修改mac的用户名 编辑:程序博客网 时间:2024/05/22 01:44

<?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)));

 }