zoukankan      html  css  js  c++  java
  • xml_class来自 phpcms

    <?php

    class xml{
     var $parser;
     var $document;
     var $stack;
     var $data;
     var $last_opened_tag;
     var $isnormal;
     var $attrs=array();
     var $failed=false;
     function __construct($isnormal){
      $this->XMLparse($isnormal);
     }
     function XMLparse($isnormal){
      $this->isnormal=$isnormal;
      $this->parser=xml_parser_create('ISO-8859-1');
      xml_parser_set_option($this->parser,XML_OPTION_CASE_FOLDING,false);
      xml_set_object($this->parser,$this);
      xml_set_element_handler($this->parser,'open','close');
      xml_set_character_data_handler($this->parser,'data');
     }
     function destruct(){
      xml_parser_free($this->parser);
     }
     function parse(&$data){
      $this->document=array();
      $this->stack=array();
      return xml_parse($this->parser,$data,true)&&!$this->failed?$this->document:'';
     }
     function open(&$parser,$tag,$attributes){
      $this->data='';
      $this->failed=false;
      if(!$this->isnormal){
       if(isset($attributes['id'])&&!is_string($this->document[$attributes['id']])){
        $this->document=&$this->document[$attributes['id']];
       }else{
        $this->failed=true;
       }
      }else{
       if(!isset($this->document[$tag])||!is_string($this->document[$tag])){
        $this->document=&$this->document[$tag];
       }else{
        $this->failed=true;
       }
      }
      $this->stack[]=&$this->document;
      $this->last_opened_tag=$tag;
      $this->attrs=$attributes;
     }
     function data(&$parser,$data){
      if($this->last_opened_tag!=null){
       $this->data.=$data;
      }
     }
     function close(&$parser,$tag){
      if($this->last_opened_tag==$tag){
       $this->document=$this->data;
       $this->last_opened_tag=null;
      }
      array_pop($this->stack);
      if($this->stack){
       $this->document=&$this->stack[count($this->stack)-1];
      }
     }
    }
    ?>

  • 相关阅读:
    Nginx 均衡负载
    今天不知道写啥
    ios 多线程管理中的关键点
    iOS 开发中 想对于方便的MBProgressHUD
    UitableView 中原创动态高度计算
    iOS 开发中常见的错误日志处理
    设计模式之二-Proxy模式
    设计模式之一-Stratrgy模式
    core dumped问题查找以及使用gdb、QT下gdbserver使用
    ssh、scp的使用,以及shell脚本解决scp需要输入密码的问题
  • 原文地址:https://www.cnblogs.com/legend-song/p/3608224.html
Copyright © 2011-2022 走看看