php XML文件解析类(附演示代码)

发布时间:2020-09-11编辑:脚本学堂
分享一个php实现的xml文件的解析类,挺不错的,实现了xml文件的读取、内容解析、格式判断等功能,并有演示示例,有需要的朋友参考下。

1,xml文件解析类 XMLParser.class.php
 

复制代码 代码示例:

<?php 
/** XML 文件分析类
*   Date:   2013-02-01
*   Author: fdipzone
*   Ver:    1.0
*   Edition www.jb200.com
*   func:
*   loadXmlFile($xmlfile)     读入xml文件输出Array
*   loadXmlString($xmlstring) 读入xmlstring 输出Array
*/ 
 
class XMLParser{
    /** 读取xml文件
    * @param  String  $xmlfile
    * @return Array
    */ 
    public function loadXmlFile($xmlfile){
        // get xmlfile content 
        $xmlstring = file_exists($xmlfile)? file_get_contents($xmlfile) : ''; 
 
        // parser xml 
        list($flag, $data) = $this->parser($xmlstring);
        return $this->response($flag, $data);
    } 
 
 
    /** 读取xmlstring
    * @param  String $xmlstring
    * @return Array
    */ 
    public function loadXmlString($xmlstring){
        // parser xml 
        list($flag, $data) = $this->parser($xmlstring); 
 
        return $this->response($flag, $data);
    }
 
    /** 解释xml内容
    * @param   String $xmlstring
    * @return  Array
    */ 
    private function parser($xmlstring){
        $flag = false; 
        $data = array(); 
 
        // check xml format 
        if($this->checkXmlFormat($xmlstring)){ 
            $flag = true; 
             
            // xml to object 
            $data = simpleXML_load_string($xmlstring, 'SimpleXMLElement', LIBXML_NOCDATA); 
             
            // object to array 
            $this->objectToArray($data); 
        }
        return array($flag, $data);
    }
 
    /** 检查xml格式是否正确
    * @param  String $xmlstring
    * @return boolean
    */ 
    private function checkXmlFormat($xmlstring){
        if($xmlstring==''){ 
            return false; 
        } 
 
        $xml_parser_obj = xml_parser_create(); 
 
        if(xml_parse_into_struct($xml_parser_obj, $xmlstring, $vals, $indexs)===1){ // 1:success 0:fail 
            return true; 
        }else{ 
            return false; 
        } 
    }

    /** object 转 Array
    * @param  object $object
    * @return Array
    */ 
    private function objectToArray(&$object){
        $object = (array)$object;
        foreach($object as $key => $value){ 
            if($value==''){ 
                $object[$key] = ""; 
            }else{ 
                if(is_object($value) || is_array($value)){ 
                    $this->objectToArray($value); 
                    $object[$key] = $value; 
                } 
            } 
        }
    }

    /** 输出返回
    * @param  boolean $flag true:false
    * @param  Array   $data 转换后的数据
    * @return Array
    */ 
    private function response($flag=false, $data=array()){     
        return array($flag, $data);     
    }
}
?>

2,演示示例
 

复制代码 代码示例:
<?php
require "XMLParser.class.php"; 
 
$xmlfile = 'file.xml'; 
$xmlstring = '<?xml version="1.0" encoding="utf-8"?> 
<xmlroot> 
<status>1000</status> 
<info></info> 
<result><id>100</id> 
<name>fdipzone</name> 
<gender>1</gender> 
<age>28</age> 
</result> 
</xmlroot>'; 
 
echo '<pre>'; 
 
$xml_parser = new XMLParser(); 
echo "response xmlfilern"; 
list($flag, $xmldata) = $xml_parser->loadXmlFile($xmlfile); 
if($flag){ 
    print_r($xmldata); 

 
echo "response xmlstringrn"; 
list($flag, $xmldata) = $xml_parser->loadXmlString($xmlstring); 
if($flag){ 
    print_r($xmldata); 

 
echo '</pre>'; 
?> 

附,PHP XML预定义常量: http://www.jb200.com/shouce/php5/libxml.constants.html