配色: 字号:
PHP数组与XML之间的转换的例子
2016-08-17 | 阅:  转:  |  分享 
  
PHP数组与XML之间的转换的例子

PHP将数组转换成XML

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

?代码如下 复制代码 functionarrayToXml($arr){????$xml="";?????foreach?($arras$key=>$val){????????if(is_array($val)){????????????$xml.="<".$key.">".arrayToXml($val)."";????????}else{????????????$xml.="<".$key.">".$val."";????????}????}????$xml.="";????return$xml;?} 我测试了下,这个最简单,速度又快,支持多为数组,中文也不会乱码。

另一种方法是利用DOMDocument来生成xml结构:

?代码如下 复制代码 functionarrayToXml($arr,$dom=0,$item=0){????if(!$dom){????????$dom=newDOMDocument("1.0");????}????if(!$item){????????$item=$dom->createElement("root");?????????$dom->appendChild($item);????}????foreach($arras$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:

?代码如下 复制代码 ?月光光abcd?13002??1200?1829??2016-06-01? 通过simplexml_load_string()解析读取xml数据,然后先转成json格式,再转换成数组。

?代码如下 复制代码 functionxmlToArray($xml){????????//禁止引用外部xml实体????libxml_disable_entity_loader(true);????$xmlstring=simplexml_load_string($xml,''SimpleXwww.shanxiwang.netMLElement'',LIBXML_NOCDATA);????$val=json_decode(json_encode($xmlstring),true);??????return$val;?} 得到数组后,我们就可以对数据进行各种处理了。

下面是网上的

?代码如下 复制代码 classArrayToXML{???/????ThemainfunctionforconvertingtoanXMLdocument.????PassinamultidimensionalarrayandthisrecrusivelyloopsthroughandbuildsupanXMLdocument.????????@paramarray$data????@paramstring$rootNodeName-whatyouwanttherootnodetobe-defaultstodata.????@paramSimpleXMLElement$xml-shouldonlybeusedrecursively????@returnstringXML????/???publicstaticfunctiontoXml($data,$rootNodeName=''data'',$xml=null)???{???????//turnoffcompatibilitymodeassimplexmlthrowsawobblyifyoudon''t.???????if(ini_get(''zend.ze1_compatibility_mode'')==1)???????{???????????ini_set(''zend.ze1_compatibility_mode'',0);???????}???????????????if($xml==null)???????{???????????$xml=simplexml_load_string("<$rootNodeName/>");???????}???????????????//loopthroughthedatapassedin.???????foreach($dataas$key=>$value)???????{???????????//nonumerickeysinourxmlplease!???????????if(is_numeric($key))???????????{???????????????//makestringkey...???????????????$key="unknownNode_".(string)$key;???????????}???????????????????????//replaceanythingnotalphanumeric???????????$key=preg_replace(''/[^a-z]/i'','''',$key);???????????????????????//ifthereisanotherarrayfoundrecrusivelycallthisfunction???????????if(is_array($value))???????????{???????????????$node=$xml->addChild($key);???????????????//recrusivecall.???????????????ArrayToXML::toXml($value,$rootNodeName,$node);???????????}???????????else????????????{???????????????//addsinglenode.???????????????????????????????$value=htmlentities($value);???????????????$xml->addChild($key,$value);???????????}???????????????????}???????//passbackasstring.orsimplexmlobjectifyouwant!???????return$xml->asXML();???}} 下面是我自己编辑的代码

?代码如下 复制代码 functionarrtoxml($arr,$dom=0,$item=0){???if(!$dom){???????$dom=newDOMDocument("1.0");???}???if(!$item){???????$item=$dom->createElement("root");????????$dom->appendChild($item);???}???foreach($arras$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{???????????arrtoxml($val,$dom,$itemx);???????}???}???return$dom->saveXML();} XML转成数组

?代码如下 复制代码 如果你使用curl获取的xmldata$xml=simplexml_load_string($data);$data[''tk'']=json_decode(json_encode($xml),TRUE);如果是直接获取URL数据的话$xml=simplexml_load_file($data);$data[''tk'']=json_decode(json_encode($xml),TRUE);先把simplexml对象转换成json,再将json转换成数组。

献花(0)
+1
(本文系网络学习天...首藏)