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

时间:2022-06-01 13:02:03

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

XMLParser.class.php类文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?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示例程序如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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预定义常量可参考官方文档:
http://www.php.net/manual/en/libxml.constants.php

希望本文所述对大家PHP程序设计的学习有所帮助。