xml 解析类

2023-12-05 0 433

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-2410: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) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 XML/RSS xml 解析类 https://www.u-9.cn/biancheng/xmlrss/96911.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务