今天主要写一下XML方式封装通信接口的代码实现,XML的通信接口编写起来明显要比json的复杂一些,不过道理很简单,无非就是拼接成一个xml字符串输出,接着昨天的代码继续写。
$code, 'message' => $message, 'data' => $data ); //json_encode()把数组转化成json格式输出 echo json_encode($result); exit; } /*********************************** * 返回xml格式数据 * $param integer $code * $param string $message * $param array $data * return json * ******************************/ public static function xml($code,$message='',$data=array()){ //做出一个验证,如果不是数字,就返回空 if(!is_numeric($code)){ return ''; } //把穿进来的三个值,组装成一个数组 $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); //便于浏览器输出xml格式文件 header('content-type:text/xml'); //拼接xml $xml.=" "; $xml.=''; $xml.=self::xmlToEncode($result); //获取组装好的xml数据 $xml.=' '; echo $xml; exit; } public static function xmlToEncode($arr){ //准备一个接收的空数组 $xml=''; //将这个数组的键,作为节点名称,值作为内容 foreach ($arr as $key => $value) { /*约定一个规则,如果键是数字的话,格式为- aaa*/ if(is_numeric($key)){ $attr = " id='{$key}'";//属性的值需要带上引号,不然报错 $key = 'item'; } $xml.="<{$key}{$attr}>"; //如果$value的值是个多维数组的话,需要递归遍历 $xml.=is_array($value) ? self::xmlToEncode($value) : $value; $xml.=" "; } return $xml; }}$array=array( 'name'=>'学PHP的小蚂蚁', 'age'=>'27', 'sex'=>'male', 'url'=>'博客 http://my.oschina.net/woshixiaomayi/blog', 'like'=>array( 'eat'=>'apple', 'drink'=>'milk', 'happy', 'lucky' ) );Response::xml(200,'success',$array);/* 打印出来的样子
*/ ?> 200
success 学PHP的小蚂蚁 27 male 博客 http://my.oschina.net/woshixiaomayi/blog apple milk - happy
- lucky
其中有两点需要注意:
在拼接xml字符串的时候,如果数据是一个多维的数组,这时候就需要递归遍历的方法来拼接字符串。
xml的节点名称不能为数字,所以采取了一个方法<item id='12'>的方法来代替,这个可以自定义的,根据自己需要定义。