ParsePermit_class.php
资源名称:BBWPS.rar [点击查看]
上传用户:yttaitong
上传日期:2009-05-10
资源大小:128k
文件大小:4k
源码类别:
WEB源码(ASP,PHP,...)
开发平台:
PHP
- <?PHP
- /*
- [BBWPS!] (C)2006-2010 小蜜蜂版权所有.
- This is NOT a freeware, use is subject to license terms
- 时间:2007年12月
- 描述:解析Out文件
- */
- //调用方式
- //$x=new OutParse("http://192.168.1.99/bcms/flashtest/out.php");
- //$a=$x->GetItems();
- //print_r($a);
- //-----------------------------------------------
- class PermitParse{
- var $url; //Out文件的地址
- var $data; //Out文件的内容
- var $version; //Out文件的版本号
- var $items; //Out文件中的元素信息
- //与Out解析有关的属性
- var $xml_parser; //xml解析器句柄
- var $depth="2"; //XML当前解析深度
- var $tag="permit"; //当前正在解析的XML元素
- var $prev_tag; //当前正在解析的上一个元素
- var $marker="2"; //用来标记制定的深度
- var $event; //实践名称:CHANNEL and ITEM
- var $item_index; //item元素索引
- //--------------------------------------------
- //功能:PHP5的构造函数
- //参数:$Out_url Out文件地址可以是网络地址
- //返回:NULL
- //--------------------------------------------
- function __construct($Out_url=""){
- $this->PermitParse($Out_url);
- }
- //--------------------------------------------
- //功能:PHP4的构造函数
- //参数:$Out_url Out文件地址可以是网络地址
- //返回:NULL
- //--------------------------------------------
- function PermitParse($Out_url=NULL){
- if(get_cfg_var("allow_url_fopen")){//系统开启FOPEN远程调用
- $fp=fopen($Out_url,"r");
- while(!feof($fp)){$this->data.=fgets($fp,4096);}
- fclose($fp);
- }
- else{$this->data=openFileRemote($Out_url);}
- if($this->data){
- $this->ParseReg();
- }
- else{
- return null;
- }
- }
- //--------------------------------------------
- //功能:获得ITEM的信息
- //参数:NULL
- //返回:ARRAY
- //--------------------------------------------
- function GetItems(){
- return $this->items;
- }
- //--------------------------------------------
- //功能:获得Out的版本信息
- //参数:NULL
- //返回:ARRAY
- //--------------------------------------------
- function GetVersion(){
- return $this->version;
- }
- //--------------------------------------------
- //功能:开始解析XML元素
- //参数:$parser 解析器句柄
- //参数:$name 标签名称
- //参数:$attribs 标签的属性
- //返回:NULL
- //--------------------------------------------
- function startElement($parser, $name, $attribs){
- $this->depth++;
- $this->tag=$name;
- switch($name){
- case "permit":
- $this->event=$name;
- $this->version=$attribs["version"];
- break;
- case "item":
- $this->item_index++;
- $this->event=$name;
- $this->marker=$this->depth+1;
- break;
- default:
- return NULL;
- }
- }
- //--------------------------------------------
- //功能:结束某个元素解析时
- //参数:$parser 解析器句柄
- //参数:$name 标签名称
- //返回:NULL
- //--------------------------------------------
- function endElement($parser, $name){
- $this->depth--;
- return null;
- }
- //--------------------------------------------
- //功能:处理标签之间的数据
- //参数:$parser 解析器句柄
- //参数:$data 数据
- //返回:NULL
- //--------------------------------------------
- function characterData($parser, $data){
- //当数据为item下的数据时执行
- if( $this->event=="item" && $this->marker==$this->depth ){
- if($this->prev_tag==$this->tag){
- $this->items[$this->item_index][$this->tag].=$data;
- }
- else{
- $this->items[$this->item_index][$this->tag]=$data;
- }
- }
- $this->prev_tag=$this->tag;
- }
- //--------------------------------------------
- //功能:利用PHPXML解析器进行解析
- //参数:NULL
- //参数:$data 数据
- //返回:NULL
- //--------------------------------------------
- function ParseXML(){
- $this->xml_parser = xml_parser_create();//创建xml解析器
- xml_set_object($this->xml_parser, &$this);//设置处理的对象
- xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, 0);//设置解析的参数,让所有的标签都大写,为了方便以后的处理和统一
- xml_set_element_handler($this->xml_parser, "startElement", "endElement");//设置解析标签时候的回调函数
- xml_set_character_data_handler($this->xml_parser, "characterData");//设置解析标签内容时候的回调函数
- if (!xml_parse($this->xml_parser, $this->data)){//开始解析数据
- return false;
- }
- return true;
- }
- //--------------------------------------------
- //功能:利用PHP正则解析器进行解析
- //参数:NULL
- //参数:$data 数据
- //返回:NULL
- //--------------------------------------------
- function ParseReg(){
- preg_match_all("/<item>(.*?)</item>/is",$this->data,$itemArray);
- foreach ($itemArray[1] as $item){
- $this->item_index++;
- preg_match_all("/<([a-zA-Z]+)>(.*?)</\1>/is",$item,$tagArray);
- foreach ($tagArray[2] as $key=>$data){
- $this->items[$this->item_index][strtolower(trim($tagArray[1][$key]))]=$data;
- }
- }
- }
- }
- ?>