本文实例讲述了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程序设计的学习有所帮助。