PHP处理数组和XML之间的互相转换


Posted in PHP onJune 02, 2016

在开发中,我们经常会遇到数组与XML之间的互相转换,尤其在处理接口开发的时候经常用到,比如对方客户端POST一个XML格式的数据到服务器上,服务器上的程序要负责接收解析,还有需要将数据表数据以XML格式提供给第三方等等应用。
本文我们将简单介绍如何使用PHP处理数组和XML之间的互相转换。

源码下载:PHP数组与XML之间的转换

PHP将数组转换成XML
 PHP可以将数组转换成xml格式,简单的办法是遍历数组,然后将数组的key/value转换成xml节点,再直接echo输出了,如:

function arrayToXml($arr){ 
$xml = "<root>"; 
foreach ($arr as $key=>$val){ 
if(is_array($val)){ 
$xml.="<".$key.">".arrayToXml($val)."</".$key.">"; 
}else{ 
$xml.="<".$key.">".$val."</".$key.">"; 
} 
} 
$xml.="</root>"; 
return $xml; 
}

我测试了下,这个最简单,速度又快,支持多为数组,中文也不会乱码。
 另一种方法是利用DOMDocument来生成xml结构:

function arrayToXml($arr,$dom=0,$item=0){ 
if (!$dom){ 
$dom = new DOMDocument("1.0"); 
} 
if(!$item){ 
$item = $dom->createElement("root"); 
$dom->appendChild($item); 
} 
foreach ($arr as $key=>$val){ 
$itemx = $dom->createElement(is_string($key)?$key:"item"); 
$item->appendChild($itemx); 
if (!is_array($val)){ 
$text = $dom->createTextNode($val); 
$itemx->appendChild($text); 

}else { 
arrayToXml($val,$dom,$itemx); 
} 
} 
return $dom->saveXML(); 
}

它同样可以将数组转换成xml,而且支持多维数组,生成的xml中文也不会乱码。

PHP将XML转换成数组
 
做接口开发的时候经常会碰到别人提交给你的是xml格式的数据,常见的微信接口、支付宝接口等,他们的接口如发送消息通信都是xml格式的,那么我们先想办法拿到这个xml数据,然后再将其转化成数组。
 假设我们获取到一个这样的XML:

<root> 

<user>

月光光abcd</user> 

<pvs>13002</pvs>

 <ips> 

<baidu_ip>1200</baidu_ip>

 <google_ip>1829</google_ip>

 </ips> 

<date>2016-06-01</date>

 </root>

通过simplexml_load_string()解析读取xml数据,然后先转成json格式,再转换成数组。

function xmlToArray($xml){ 

 //禁止引用外部xml实体 

libxml_disable_entity_loader(true); 

$xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); 

$val = json_decode(json_encode($xmlstring),true); 

return $val; 

}

调用xmlToArray()可得到以下结果:

PHP处理数组和XML之间的互相转换 

得到数组后,我们就可以对数据进行各种处理了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
PHP抽象类 介绍
Jun 13 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
Aug 08 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
Apr 29 PHP
Yii2使用swiftmailer发送邮件的方法
May 03 PHP
[原创]php实现 data url的图片生成与保存
Dec 04 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
Laravel框架搜索分页功能示例
Feb 01 PHP
php使用curl伪造浏览器访问操作示例
Sep 30 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
May 02 PHP
PHP邮箱验证示例教程
Jun 01 #PHP
PHP微信公众号自动发送红包API
Jun 01 #PHP
PHP模块化安装教程
Jun 01 #PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 #PHP
基于PHP生成简单的验证码
Jun 01 #PHP
深入理解PHP原理之执行周期分析
Jun 01 #PHP
深入理解PHP之OpCode原理详解
Jun 01 #PHP
You might like
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
Jquery 设置标题的自动翻转
2009/10/03 Javascript
仅用[]()+!等符号就足以实现几乎任意Javascript代码
2010/03/01 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
jQuery中next()方法用法实例
2015/01/07 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
Python设计模式之单例模式实例
2014/04/26 Python
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
Python中is和==的区别详解
2018/11/15 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python语言进阶知识点总结
2019/05/28 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
如何在存储过程中使用Loop
2016/01/05 面试题
工作中的自我评价如何写好
2013/10/28 职场文书
如何写好自荐信
2014/04/07 职场文书
2014年度党员自我评议
2014/09/13 职场文书
防灾减灾标语
2014/10/07 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
八一建军节主持词
2015/07/01 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电