class DATA_XML{

var $parser;  //解释器
var $tags;    //xml标签
var $on;   //标签开始
var $root; //根元素
var $data = array(); //解析出来的数据放到数组

/*
 * * 構造函數
 * @param  $filename xml文件名
 * @param  $root     xml文档根元素
 */
function DATA_XML($filename,$root){
$this->root = $root;
$this->parser = xml_parser_create();
xml_set_object(&$this->parser,&$this);
xml_set_element_handler($this->parser,"tag_on","tag_off");
xml_set_character_data_handler($this->parser,"getdata");
xml_parser_set_option($this->parser,XML_OPTION_CASE_FOLDING,0);
if(file_exists($filename)){
$fp = fopen($filename,"r");
$c = fread($fp,filesize($filename));
$this->parse($c);
fclose($fp);
}
else{
echo 'The file is not exists';
}
}

//解析函数
function parse($data){
xml_parse($this->parser,$data);
}

//发现元素触发函数
function tag_on($parser,$tag,$attributes){
$this->on = true;
$this->tags = $tag;
}
//元素结束函数
function tag_off($parser,$tag){

$this->on = false;

}

//取出元素
function getdata($parser,$cdata){
if($this->on && $this->tags != $this->root){
$this->data[$this->tags][] = trim($cdata);
}
return $this->data;
}
}