源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

xml 解析类

  • 时间:2022-04-22 03:26 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要: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(); ?>
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部