Home > Backend Development > PHP Tutorial > PHP数组与XML之间的转换

PHP数组与XML之间的转换

WBOY
Release: 2016-06-23 13:03:12
Original
721 people have browsed it

在开发中,我们经常会遇到数组与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;}
Copy after login

我测试了下,这个最简单,速度又快,支持多为数组,中文也不会乱码。

另一种方法是利用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();}
Copy after login

它同样可以将数组转换成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>
Copy after login

通过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;}
Copy after login

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

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

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template