手记 / php的XML文件解释类应用实例

php的XML文件解释类应用实例

6个月前99浏览0评论

本文实例讲述了php的XML文件解释类及其用法,是非常实用的技巧。分享给大家供大家参考。具体如下:

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) : '';
    // 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);
  }
}
?>

Demo示例程序如下:

<?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 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 '</pre>';
?>

更多关于php的XML文件解释类应用实例请关注PHP中文网(www.php.cn)其他文章!

相关标签:PHP
    0推荐

      作者的热门手记