1+ <?php
2+ /**
3+ * xml文件处理类
4+ * @authors Andy Chen ([email protected] ) 5+ * @date 2014-03-15 10:52:37
6+ * @version $Id$
7+ */
8+
9+ class xmlClass {
10+
11+ function __construct (){
12+
13+ }
14+
15+
16+ /**
17+ * 将php数组转换为XML文件的方法
18+ * @param str $name 要生成的XML文件名
19+ * @param arr $array 要转换的数组
20+ * @param bool $return 函数是否要返回生成后的文件路径
21+ * @return str $dir 返回XML文件路径
22+ */
23+ public function ArrToXml ($ name , $ array , $ return = false ){
24+
25+ //检查app下是否有xml文件
26+ if (!file_exists (APP_XML_ROOT )) {
27+ if (!mkdir (APP_XML_ROOT ,0777 )) { //0777表示最大的读写权限
28+ die ('不能创建xml文件 ' );
29+ }
30+ }
31+
32+ $ file = APP_XML_ROOT .$ name .'.xml ' ;
33+
34+ //打开文件并取得文件头指针
35+ $ handle = @fopen ($ file , "w " );
36+
37+ //组装数据
38+ $ xml = $ this ->package ($ array ,'books ' ,'book ' );
39+
40+ //写入内容
41+ if (!$ wr = fwrite ($ handle , $ xml )) {
42+ die ('内容写入错误! ' );
43+ }
44+
45+ //关闭文件
46+ if (!fclose ($ handle )){
47+ die ('内容写入错误! ' );
48+ }
49+
50+ if ($ return ) {
51+ return $ file ;
52+ } else {
53+ return true ;
54+ }
55+
56+ }
57+
58+ /**
59+ * 将php数组组装为XML的方法
60+ * @param arr $arr 要转换的数组
61+ * @param str $box XML数据容器
62+ * @param str $name 数据名称
63+ * @return str $xml 返回组装好的XML字符串
64+ */
65+ public function package ($ arr ,$ box ,$ name ){
66+ $ xml = '' ;
67+ $ xml .= '< ' .$ box .'> ' ;
68+ foreach ($ arr as $ value ) {
69+ $ xml .= ' < ' .$ name .'> ' ;
70+ $ xml .= $ this ->foreachArr ($ value );
71+ $ xml .= ' </ ' .$ name .'> ' ;
72+ }
73+ $ xml .= '</ ' .$ box .'> ' ;
74+ return $ xml ;
75+ }
76+
77+ /**
78+ * 将php数组循环组装为XML字符串的方法
79+ * @param arr $value 要循环转换的数组
80+ * @return str $xml 返回组装好的XML字符串
81+ */
82+ public function foreachArr ($ value ){
83+ $ xml = '' ;
84+ foreach ($ value as $ k => $ v ) {
85+ if (is_array ($ v )) {
86+ $ k = is_numeric ($ k ) ? 'action ' : $ k ;
87+ $ xml .= '< ' .$ k .'> ' ;
88+ $ xml .= $ this ->foreachArr ($ v );
89+ $ xml .= '</ ' .$ k .'> ' ;
90+ } else {
91+ $ xml .= ' < ' .$ k .'> ' .$ v .'</ ' .$ k .'> ' ;
92+ }
93+ }
94+ return $ xml ;
95+ }
96+
97+ /**
98+ * 将XML文件转换为php数组的方法
99+ * @param str $name 要生成的php数组文件名
100+ * @param object $path 要转换的Xml文件路径
101+ * @param bool $return 函数是否要返回生成后的文件路径
102+ * @return str $dir 返回XML文件路径
103+ */
104+ public function XmlToArr ($ name ,$ path ,$ return = false ){
105+ // 打开文件
106+ $ file = APP_XML_ROOT .$ name .'.php ' ;
107+ $ handle = @fopen ($ file , "w " ); //打开或生成文件并取得文件头指针
108+ $ xml = simplexml_load_file ($ path );
109+ if (!$ xml ) error ('xml文件载入错误!请重试。 ' );
110+
111+ //生成php数组
112+ $ arr = $ this ->objectToArray ($ xml );
113+
114+ //将数组写入文件
115+ // NO.1
116+ $ string_start = "<?php return \n" ;
117+ $ string_process = var_export ($ arr , TRUE );
118+ $ string_end = "\n?> " ;
119+ $ string = $ string_start .$ string_process .$ string_end ; //开始写入文件
120+ $ put = file_put_contents ($ file , $ string );
121+ if (!$ put ) error ('数据生成出错!请重试。 ' );
122+
123+ // // NO.2
124+ // //数组序列化
125+ // $string = serialize($arr);
126+ // //写入文件
127+ // if (!fwrite($handle,$string)) {
128+ // error('内容写入错误!');
129+ // }
130+ // // 关闭文件
131+ // if (!fclose($handle)) {
132+ // error('内容写入错误!');
133+ // }
134+
135+ if ($ return ) {
136+ return $ file ;
137+ } else {
138+ return true ;
139+ }
140+ }
141+
142+ /**
143+ * 将XML文件转换为php数组的方法
144+ * @param object $object 要转换的XML对象
145+ * @return arr $array 返回XML文件路径
146+ */
147+ public function objectToArray ($ object ) {
148+ // 判断对象是否为空
149+ if ( count ($ object )==0 ){
150+ return trim ((string )$ object );
151+ }
152+
153+ $ array = array ();
154+
155+ // 去除XML的“SimpleXMLElement Object”预定义字符
156+ $ object = is_object ($ object ) ? get_object_vars ($ object ) : $ object ;
157+
158+ foreach ($ object as $ key => $ val ) {
159+ $ newVal = (is_object ($ val ) || is_array ($ val )) ? $ this ->objectToArray ($ val ) : $ val ;
160+ $ array [$ key ] = $ newVal ;
161+ }
162+ return $ array ;
163+ }
164+
165+
166+
167+
168+ }
169+ ?>
0 commit comments