xml?解析类(php版)
发布时间:2020-12-16 07:54:19 所属栏目:百科 来源:网络整理
导读:xml 解析类 ?php ob_start(); /*? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??? * Copyright (c) 2003 NightKids??weidewang@magus-soft.com? ?? ?? ?? ?? ?? ?? ? * All rights reserved.? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
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,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(); ?> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |