今天主要寫一下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'>的方法來代替,這個能夠自定義的,根據本身須要定義。瀏覽器