文档章节

小蚂蚁学习APP接口开发(2)—— XML方式封装通信接口

嗜学如命的小蚂蚁
 嗜学如命的小蚂蚁
发布于 2015/10/14 08:59
字数 616
阅读 462
收藏 2

    今天主要写一下XML方式封装通信接口的代码实现,XML的通信接口编写起来明显要比json的复杂一些,不过道理很简单,无非就是拼接成一个xml字符串输出,接着昨天的代码继续写。

<?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>
*/

 ?>

其中有两点需要注意:

  1.     在拼接xml字符串的时候,如果数据是一个多维的数组,这时候就需要递归遍历的方法来拼接字符串。

  2.     xml的节点名称不能为数字,所以采取了一个方法<item id='12'>的方法来代替,这个可以自定义的,根据自己需要定义。

© 著作权归作者所有

共有 人打赏支持
嗜学如命的小蚂蚁
粉丝 142
博文 161
码字总数 100864
作品 0
郑州
程序员
私信 提问
小蚂蚁学习APP接口开发(1)—— json方式封装通信接口

前段时间,和公司的一个安卓程序员配合开发一款简单的APP,因为第一次写,时间也紧张,总感觉写的不是那么的完美,趁着这段时间好好总结一下经验。 对于APP的请求,服务器返回的数据类型一般...

嗜学如命的小蚂蚁
2015/10/13
985
0
用PHP写APP接口,现在我也在学习中。。。

现在app这么火,作为一个phper,应该知道如何写app的接口,下面做一个讲解。Index: 第1章 APP接口简介 - 第2章 封装通信接口方法 2-1 JSON方式封装通信接口 (14:39) 2-2 PHP生成XML数据 (12:...

YSail
2018/07/05
0
0
小蚂蚁学习APP接口开发(6)—— APP接口实例——首页数据接口的案例实现

读取数据的三种方式 读取数据库方式开发首页接口 从数据库获取数据——》封装——》生成接口数 优点:数据时效性比较高的系统 2. 读取缓存方式开发首页接口(用途非常广) 从数据库获取信息—...

嗜学如命的小蚂蚁
2015/10/18
805
0
Android 基于注解IOC组件化/模块化的架构实践

当前参与的项目历史也很久远,第一行代码据说是写于2014年的某一天,那时Android用的ide还是Eclipse、那时Android还没有很好的架构指导(mvp、mvvm)、那时Android最新的版本是5.0、那时And...

Tamic
2018/05/13
0
0
Flex通信篇——构建企业级HTTP通信层

概述 RIA和SOA是一对绝配。SOA强调把业务以接口方式向外界提供不关注前端的呈现,而RIA则强调用户体现,结合两者优势能够设计出用户体现良好、灵活的、易扩展、易集成的系统。要处理好RIA前端...

彭博
2012/03/09
189
0

没有更多内容

加载失败,请刷新页面

加载更多

多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
2
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
6
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
8
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
3
0
解决SVN:E210007无法协商认证机制

svn:E210007 svn: Cannot negotiate authentication mechanism 执行下面代码即可 sudo yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-ldap...

临江仙卜算子
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部