Home  >  Article  >  Backend Development  >  An explanation of the php XML file interpretation class

An explanation of the php XML file interpretation class

jacklove
jackloveOriginal
2018-06-11 13:42:021734browse

XMLParser.class.php

<?php
/** XML 文件分析类
*   Date:   2013-02-01
*   Author: fdipzone
*   Ver:    1.0
*
*   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) : &#39;&#39;;
        // 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, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
            
            // object to array
            $this->objectToArray($data);
        }
        return array($flag, $data);
    }
    /** 检查xml格式是否正确
    * @param  String $xmlstring
    * @return boolean
    */
    private function checkXmlFormat($xmlstring){
        
        if($xmlstring==&#39;&#39;){
            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==&#39;&#39;){
                $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);
    
    }
}
?>

Demo:

<?php
require "XMLParser.class.php";
$xmlfile = &#39;file.xml&#39;;
$xmlstring = &#39;<?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>&#39;;
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
$xml_parser = new XMLParser();
echo "response xmlfile\r\n";
list($flag, $xmldata) = $xml_parser->loadXmlFile($xmlfile);
if($flag){
print_r($xmldata);
}
echo "response xmlstring\r\n";
list($flag, $xmldata) = $xml_parser->loadXmlString($xmlstring);
if($flag){
print_r($xmldata);
}
echo &#39;
'; ?>

This article explains the php XML file interpretation class. For more related content, please pay attention to the php Chinese website.

Related recommendations:

php CSS Update Class related content explanation

About php __call and __callStatic content explanation

About memcached common commands and usage instructions

The above is the detailed content of An explanation of the php XML file interpretation class. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn