Skip to content

Commit 6e75bd2

Browse files
add file
1 parent 30e5958 commit 6e75bd2

1 file changed

Lines changed: 169 additions & 0 deletions

File tree

xmlClass.php

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
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

Comments
 (0)