首页 > 编程语言 >PHP数组与XML之间的转换【转载】

PHP数组与XML之间的转换【转载】

时间:2023-02-23 21:08:21浏览次数:59  
标签:XML xml val dom item 数组 PHP


在开发中,我们经常会遇到数组与XML之间的互相转换,尤其在处理接口开发的时候经常用到,比如对方客户端POST一个XML格式的数据到服务器上,服务器上的程序要负责接收解析,还有需要将数据表数据以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()可得到以下结果:

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

标签:XML,xml,val,dom,item,数组,PHP
From: https://blog.51cto.com/u_15967457/6081725

相关文章

  • 【学习笔记】后缀数组
    容易忘记这个东西,干脆写篇博客把关键的地方讲清楚。(个人笔记向)voidgetsa(){ intlen=123; for(inti=1;i<=n;i++)cnt[id[i]=s[i]]++; for(inti=1;i<=len;i++)cnt[i]+......
  • C语言之二维数组
    1、定义、初始化数组的地址等于其首个元素的地址[存储类型]数据类型标识符[行下标] [列下标]2、元素引用 数组名称【行下标】【列下标】3、存储形式......
  • KingbaseES Json 系列十:Json数组构造函数
    KingbaseESJson系列十--Json数组构造函数(ARRAY_TO_JSON,JSONB_BUILD_ARRAY,JSON_ARRAY,JSON_BUILD_ARRAY)JSON数据类型是用来存储JSON(JavaScriptObjectNotation)数......
  • KingbaseES Json 系列十一:Json数组操作函数
    KingbaseESJson系列十一--Json数组操作函数(JSONB_ARRAY_ELEMENTS,JSONB_ARRAY_ELEMENTS_TEXT,JSONB_ARRAY_LENGTH,JSON_ARRAY_ELEMENTS,JSON_ARRAY_ELEMENTS_TEXT,JSON_......
  • 代码随想录算法Day23 | 669. 修剪二叉搜索树 ,108.将有序数组转换为二叉搜索树 , 538.把
    669.修剪二叉搜索树题目链接:669.修剪二叉搜索树-力扣(LeetCode)思路在删除二叉搜索树中节点值为key的节点这一题中,分五种情况来考虑,找到节点后删除即可。而这道题......
  • JAVA解析xml
    <?xmlversion="1.0"encoding="UTF-8"standalone="no"?><contacts><tr><td>4</td><td>广州市鼎和机械设备有限公司44</td><td>东莞......
  • 关于数组的map、filter、every、some、find、findIndex、 includesd几个方法实现原理
    map方法原理//map遍历格式所有项并返回一个新数组Array.prototype.myMap=function(callback){letarr=[];for(leti=0;i<this.length;i++){ar......
  • 16.数组使用
    数组使用1.打印全部元素int[]arrays={1,2,3,4,5};for(inti=0;i<arrays.length;i++){System.out.println(arrays[i]);}//强化for循环,这个循环中的元......
  • 15.数组
    数组1.数组的定义数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可......
  • 小记:php无法登录mysql服务器
    PHP脚本连接到MySQL服务器,可能是以下几个原因:MySQL服务器没有运行或停止了。你可以尝试重启MySQL服务器。PHP扩展没有安装或启用。你需要确保安装了PHP的M......