如何生成XML?
php 中生成 XML
数据,通常有两种方式:
- 拼接字符串:顾名思义,将每段 xml 数据以字符串形式拼接到一起。
- 系统类:使用 php 提供的类,domDocument / XMLWriter / SimpleXML。
封装接口
我们使用第一种方式(拼接字符串)来封装 XML数据接口,代码中有详细注释。
<?php
/*
* (PHP简单封装xml数据接口)
* @param integer $code 状态码
* @param string $message 提示信息
* @param array $data 数据
* return xml(string)
*/
class Response {
public static function xml($code, $message = '', $data = []){
# 判断参数有效性及错误处理
// code...
# 结果(最终数组)
$result = [
"code" => $code,
"message" => $message,
"data" => $data
];
# 更改头部(为了更清晰的展示XML节点)
header('Content-type: text/xml');//xml
# 生成XML(字符串拼接方式)
$xml = '<?xml version="1.0" encoding="UTF-8"?>';//xml head
$xml .= '<root>';//拼接根节点(开始)
$xml .= self::toXML($result);//调用处理函数
$xml .= '</root>';//拼接根节点(结束)
echo $xml;
}
# 解析结果数组转为对应的xml节点
public static function toXML($data){//参数为data(result)
# 临时存储xml数据
$xml = $id = '';
# 遍历并拼接字符串
foreach($data as $key => $value){
# 如果key是数字(即非关联数组 => [hello,2,true] )
# 以 <item id='?'></item> 展示,id为key
if(is_numeric($key)){//如果是数字
$id = "id='{$key}'";//将key作为id属性
$key = 'item ';//将item作为节点名
}
$xml .= "<{$key}{$id}>";//开始节点
# 如果是数组则递归(否则直接返回value值)
$xml .= is_array($value) ? self::toXML($value) : $value;
$xml .= "</{$key}>";//结束节点
}
return $xml;
}
}
# 模拟数据
$data = [
'id' => 1,
'name' => '王佳斌',
'type' => ['A','B','C'],//非关联数组
'xx' => [//复杂混合数组
[1,2,3],
['a' => 'aa', 'b' => 'bb']
]
];
# 调用
Response::xml(200, '返回成功', $data);
?>
结果如下: