主頁 > 知識庫 > xml 解析類

xml 解析類

熱門標簽:隨州外呼調(diào)研系統(tǒng) 如何修改多個百度地圖標注 400電話辦理包年 東營電銷 本地電話機器人 r語言數(shù)據(jù)可視化地圖標注 微信地圖標注合并了 高德地圖地圖標注服務(wù)中心 南寧網(wǎng)絡(luò)外呼系統(tǒng)運營商

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 分析類.上面是實用的例子,返回結(jié)果是一個二維數(shù)組 格式 $Result[x][xml標記]=xml標記值;
這里沒有從 http 中取數(shù)據(jù),要用另外一個類取數(shù)據(jù).
*/
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 "不能創(chuàng)建 XML 解析器.br />";
         return false;
      }
   }#Function 分析XML End.
   /*
   function SetNeedParse($NeedParse){
      $this->NeedParseArray=$NeedParse;
   }*/
   function SetNeedParseBlock($NeedParseBlock){
      $this->NeedParseBlockArray=$NeedParseBlock;
   }
   function SetXMLData($XMLData=NULL){//設(shè)置XML數(shù)據(jù)
      if($XMLData==""){ if($this->debug) echo "XML 數(shù)據(jù)為空.br />";exit();
         return false;
      }
      $this->XMLData=$XMLData;
   }#Function SetXMLData End.

   function GetXMLData(){
      if($this->XMLData==""){   if($this->debug) echo "還沒有設(shè)置 XML 數(shù)據(jù).br />";exit();
         return false;
      }
      return $this->XMLData;
   }#Function getXMLData End.   

   function ParseXMLData(){   
      if($this->debug !$this->ParseHandle) echo "不能創(chuàng)建 XML 解析器.br />";   
      //if(!is_array($this->NeedParseArray) $this->debug) echo "請設(shè)置要分析的標記.br />";
        $XMLData = $this->GetXMLData();
        $this->XMLData = preg_replace('/\?xml(.*)?\?'.'>/', '', $XMLData);
        if( trim($this->XMLData)=="" ){ if($this->debug) echo "XML 數(shù)據(jù)錯誤.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數(shù)據(jù) End.

   function StartTag($ParseHandle,$Tag,$Attrib){#解析器句柄,標記名稱,標記屬性(數(shù)組)      
      $this->OpenTag[$Tag];      
   }#Function 起始標記 End.

   function CData($ParseHandle=NULL,$DataString=NULL){   
      $this->TmpData=$DataString;
   }#Function 取數(shù)據(jù) 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 結(jié)束標記 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);//設(shè)置需要分析的標記
   $xx->SetNeedParseBlock($NeedParseBlock);//設(shè)置需要分析的標記塊 比如上面的塊是 ValidError
   $xx->SetXMLData($XMLData);
   $xx->GetXMLData();   
   $xx->ParseXMLData();   //如果 === false 說明分析數(shù)據(jù)時發(fā)生錯誤

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

標簽:寧夏 拉薩 德州 黃石 益陽 果洛 西雙版納 宿遷

巨人網(wǎng)絡(luò)通訊聲明:本文標題《xml 解析類》,本文關(guān)鍵詞  xml,解析,類,xml,解析,類,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《xml 解析類》相關(guān)的同類信息!
  • 本頁收集關(guān)于xml 解析類的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章