• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    xml 解析类

    xml 解析类 ?php
    ob_start();
    /*                                                              
    * Copyright (c) 2003 NightKids  weidewang@magus-soft.com>                     
    * All rights reserved.                                                        
    *
    * Redistribution and use in source and binary forms, with or without         
    * modification, are permitted provided that the following conditions         
    * are met:                                                                    
    * 1. Redistributions of source code must retain the above copyright         
    *    notice, this list of conditions and the following disclaimer.            
    * 2. Redistributions in binary form must reproduce the above copyright        
    *    notice, this list of conditions and the following disclaimer in the      
    *    documentation and/or other materials provided with the distribution.   
    *
    * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND      
    * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE      
    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE   
    * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS   
    * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)      
    * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  
    * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF      
    * SUCH DAMAGE.
      */                    
    ################################
    /*
    Last modify 2003-10-24  10:41:11
    XML 分析类.上面是实用的例子,返回结果是一个二维数组 格式 $Result[x][xml标记]=xml标记值;
    这里没有从 http 中取数据,要用另外一个类取数据.
    */
    class z99ParseXML{
    #----------------------
       var $ParseHandle=NULL; //解析器指针
       var $CharSet="utf-8";//编码方式
       var $Tag=NULL;
       var $Attrib=array();
       var $DataString=NULL;
       var $XMLData=NULL;

       var $debug = false;

       var $ReturnData=array();

       var $CurrentTag=NULL;
       var $OpenTag=array();
       var $CloseTag=array();

       //var $NeedParseArray=array();
       var $NeedParseBlockArray=array();
       var $TagSum=0;

       var $CurrentTagA=NULL;

       var $TmpData=NULL;
    #----------------------
       function z99ParseXML(){
          $this->ParseHandle = xml_parser_create($this->CharSet);      
          if(!$this->ParseHandle){ echo "不能创建 XML 解析器.br />";
             return false;
          }
       }#Function 分析XML End.
       /*
       function SetNeedParse($NeedParse){
          $this->NeedParseArray=$NeedParse;
       }*/
       function SetNeedParseBlock($NeedParseBlock){
          $this->NeedParseBlockArray=$NeedParseBlock;
       }
       function SetXMLData($XMLData=NULL){//设置XML数据
          if($XMLData==""){ if($this->debug) echo "XML 数据为空.br />";exit();
             return false;
          }
          $this->XMLData=$XMLData;
       }#Function SetXMLData End.

       function GetXMLData(){
          if($this->XMLData==""){   if($this->debug) echo "还没有设置 XML 数据.br />";exit();
             return false;
          }
          return $this->XMLData;
       }#Function getXMLData End.   

       function ParseXMLData(){   
          if($this->debug !$this->ParseHandle) echo "不能创建 XML 解析器.br />";   
          //if(!is_array($this->NeedParseArray) $this->debug) echo "请设置要分析的标记.br />";
            $XMLData = $this->GetXMLData();
            $this->XMLData = preg_replace('/\?xml(.*)?\?'.'>/', '', $XMLData);
            if( trim($this->XMLData)=="" ){ if($this->debug) echo "XML 数据错误.br />";
               return false;
              }
              xml_parser_set_option($this->ParseHandle, XML_OPTION_CASE_FOLDING, false);
          xml_parser_set_option($this->ParseHandle, XML_OPTION_TARGET_ENCODING, $this->CharSet);
          xml_set_object($this->ParseHandle, $this);
          xml_set_element_handler($this->ParseHandle, 'StartTag', 'EndTag');
          xml_set_character_data_handler($this->ParseHandle, 'CData');
          if (!xml_parse($this->ParseHandle, $this->XMLData)) {
             if($this->debug)
                 die(sprintf('XML error: %s at line %d',
                    xml_error_string(xml_get_error_code($this->ParseHandle)),
                    xml_get_current_line_number($this->ParseHandle)));
                return false;
            }
       }#Function 解析XML数据 End.

       function StartTag($ParseHandle,$Tag,$Attrib){#解析器句柄,标记名称,标记属性(数组)      
          $this->OpenTag[$Tag];      
       }#Function 起始标记 End.

       function CData($ParseHandle=NULL,$DataString=NULL){   
          $this->TmpData=$DataString;
       }#Function 取数据 End.

       function EndTag($ParseHandle,$Tag){
          $NeedParse=$this->NeedParseBlockArray;      
          $this->CloseTag[$Tag];
          $this->CurrentTag=$Tag;
          $TmpData=$this->TmpData;
          $DataLen=strlen(trim($TmpData));
          if( $DataLen !=0 ){
             $this->ReturnData[$this->TagSum][$Tag]=$TmpData;
          }
          if(array_search($Tag,$NeedParse)!==false) $this->TagSum++;      
       }#Function 结束标记 End.      
       function Result(){
          $aTmp=$this->ReturnData;
          return $aTmp;
       }
    #----------------------
    }#Class 分析XML End.
    #===========================
    # 使用实例
    #
    #===========================
    /*
    $XMLData= EOD
    U-MAX>
        ValidError>
            ValidErrorCode>ErrorCode/ValidErrorCode>
            ValidErrorInfo>The 'ProductCode' element has an invalid value according to its data type. An error occurred at(35, 29)./ValidErrorInfo>
          ErrMSG>Eraer23 asdf SGs/ErrMSG>
        /ValidError>
       ValidError>
            ValidErrorCode>ErrorCode1/ValidErrorCode>
            ValidErrorInfo>111The 'ProductCode' element has an invalid value according to its data type. An error occurred at(35, 29)./ValidErrorInfo>
          ErrMSG>Errf aeaa SGs/ErrMSG>
        /ValidError>
       ValidError>
            ValidErrorCode>ErrorCo234/ValidErrorCode>
            ValidErrorInfo>111The 'ProductCode' element has an invalid value according to its data type. An error occurred at(35, 29)./ValidErrorInfo>
          ErrMSG>Errfae asdfSGs/ErrMSG>
        /ValidError>
       ValidError>
            ValidErrorCode>Erasdfasode1/ValidErrorCode>
            ValidErrorInfo>11fasd asdas a sd29)./ValidErrorInfo>
          ErrMSG>Eafe3aeaSGs/ErrMSG>
        /ValidError>
    /U-MAX>
    EOD;
    #===========================   
       //$NeedParse=array("ValidErrorCode","ValidErrorInfo");
       $NeedParseBlock=array("ValidError","Fuck");
       $xx = new z99ParseXML();   
       $xx->debug=true;   
       //$xx->SetNeedParse($NeedParse);//设置需要分析的标记
       $xx->SetNeedParseBlock($NeedParseBlock);//设置需要分析的标记块 比如上面的块是 ValidError
       $xx->SetXMLData($XMLData);
       $xx->GetXMLData();   
       $xx->ParseXMLData();   //如果 === false 说明分析数据时发生错误

       $aa=$xx->Result();
       echo $aa[0][ValidErrorCode]."br>";
       echo $aa[0][ErrMSG]."br>";
       echo $aa[0][ValidErrorInfo]."br>";
       echo "br>";
       echo $aa[1][ValidErrorCode]."br>";
       echo $aa[1][ErrMSG]."br>";
       echo $aa[1][ValidErrorInfo]."br>";
       for($i=0;$i=count($aa)-1;$i++){
          //echo $aa[$i][ValidErrorCode];
          //echo $aa[$i][ValidErrorInfo]."br>";
       }   
    #===========================
    */
    ob_end_flush();
    ?>
    上一篇:把图象文件转换成XML格式文件
    下一篇:使用PHP DOM-XML创建和解析XML文件
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    xml 解析类 xml,解析,类,xml,解析,类,