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