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