亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP數組與XML之間的轉換的例子

2024-09-04 11:49:17
字體:
來源:轉載
供稿:網友

數組與XML方法有不少如直接使用遍歷數組然后生成xml同時也可以使用DOMDocument來生成xml,具體的方法與步驟如下所示。

PHP將數組轉換成XML:

PHP可以將數組轉換成xml格式,簡單的辦法是遍歷數組,然后將數組的key/value轉換成xml節點,再直接echo輸出了,如:

  1. function arrayToXml($arr){ 
  2.     $xml = "<root>"
  3.     foreach ($arr as $key=>$val){ 
  4.         if(is_array($val)){ 
  5.             $xml.="<".$key.">".arrayToXml($val)."</".$key.">"
  6.         }else
  7.             $xml.="<".$key.">".$val."</".$key.">"
  8.         } 
  9.     } 
  10.     $xml.="</root>"
  11.     return $xml

我測試了下,這個最簡單,速度又快,支持多為數組,中文也不會亂碼。

另一種方法是利用DOMDocument來生成xml結構,代碼如下:

  1. function arrayToXml($arr,$dom=0,$item=0){ 
  2.     if (!$dom){ 
  3.         $dom = new DOMDocument("1.0"); 
  4.     } 
  5.     if(!$item){ 
  6.         $item = $dom->createElement("root"); 
  7.         $dom->appendChild($item); 
  8.     }  //Vevb.com 
  9.     foreach ($arr as $key=>$val){ 
  10.         $itemx = $dom->createElement(is_string($key)?$key:"item"); 
  11.         $item->appendChild($itemx); 
  12.         if (!is_array($val)){ 
  13.             $text = $dom->createTextNode($val); 
  14.             $itemx->appendChild($text); 
  15.              
  16.         }else { 
  17.             arrayToXml($val,$dom,$itemx); 
  18.         } 
  19.     } 
  20.     return $dom->saveXML(); 

它同樣可以將數組轉換成xml,而且支持多維數組,生成的xml中文也不會亂碼。

PHP將XML轉換成數組:

做接口開發的時候經常會碰到別人提交給你的是xml格式的數據,常見的微信接口、支付寶接口等,他們的接口如發送消息通信都是xml格式的,那么我們先想辦法拿到這個xml數據,然后再將其轉化成數組。

假設我們獲取到一個這樣的XML,代碼如下:

  1. <root> 
  2. <user>月光光abcd</user> 
  3. <pvs>13002</pvs> 
  4. <ips> 
  5. <baidu_ip>1200</baidu_ip> 
  6. <google_ip>1829</google_ip> 
  7. </ips> 
  8. <date>2016-06-01</date
  9. </root> 

通過simplexml_load_string()解析讀取xml數據,然后先轉成json格式,再轉換成數組,代碼如下:

  1. function xmlToArray($xml){     
  2.     //禁止引用外部xml實體 
  3.     libxml_disable_entity_loader(true); 
  4.     $xmlstring = simplexml_load_string($xml'SimpleXMLElement', LIBXML_NOCDATA); 
  5.     $val = json_decode(json_encode($xmlstring),true);   
  6.     return $val

得到數組后,我們就可以對數據進行各種處理了。

下面是網上的,代碼如下:

  1. class ArrayToXML 
  2.     /** 
  3.      * The main function for converting to an XML document. 
  4.      * Pass in a multi dimensional array and this recrusively 
  5. loops through and builds up an XML document. 
  6.      * 
  7.      * @param array $data 
  8.      * @param string $rootNodeName - what you want the root node to be
  9.  - defaultsto data. 
  10.      * @param SimpleXMLElement $xml - should only be used recursively 
  11.      * @return string XML 
  12.      */ 
  13.     public static function toXml($data$rootNodeName = 'data'$xml=null) 
  14.     { 
  15.         // turn off compatibility mode as simple xml throws a 
  16. wobbly if you don't. 
  17.         if (ini_get('zend.ze1_compatibility_mode') == 1) 
  18.         { 
  19.             ini_set ('zend.ze1_compatibility_mode', 0); 
  20.         } 
  21.         
  22.         if ($xml == null) 
  23.         { 
  24.             $xml = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$rootNodeName />"); 
  25.         } 
  26.         
  27.         // loop through the data passed in. 
  28.         foreach($data as $key => $value
  29.         { 
  30.             // no numeric keys in our xml please! 
  31.             if (is_numeric($key)) 
  32.             { 
  33.                 // make string key... 
  34.                 $key = "unknownNode_". (string) $key
  35.             } 
  36.             
  37.             // replace anything not alpha numeric 
  38.             $key = preg_replace('/[^a-z]/i'''$key); 
  39.             
  40.             // if there is another array found recrusively call this function 
  41.             if (is_array($value)) 
  42.             { 
  43.                 $node = $xml->addChild($key); 
  44.                 // recrusive call. 
  45.                 ArrayToXML::toXml($value$rootNodeName$node); 
  46.             } //Vevb.com 
  47.             else 
  48.             { 
  49.                 // add single node. 
  50.                                 $value = htmlentities($value); 
  51.                 $xml->addChild($key,$value); 
  52.             } 
  53.             
  54.         } 
  55.         // pass back as string. or simple xml object if you want! 
  56.         return $xml->asXML(); 
  57.     } 

下面是我自己編輯的代碼:

  1. function arrtoxml($arr,$dom=0,$item=0){ 
  2.     if (!$dom){ 
  3.         $dom = new DOMDocument("1.0"); 
  4.     } 
  5.     if(!$item){ 
  6.         $item = $dom->createElement("root"); 
  7.         $dom->appendChild($item); 
  8.     } 
  9.     foreach ($arr as $key=>$val){ 
  10.         $itemx = $dom->createElement(is_string($key)?$key:"item"); 
  11.         $item->appendChild($itemx); 
  12.         if (!is_array($val)){ 
  13.             $text = $dom->createTextNode($val); 
  14.             $itemx->appendChild($text); 
  15.             
  16.         }else { 
  17.             arrtoxml($val,$dom,$itemx); 
  18.         } 
  19.     } 
  20.     return $dom->saveXML(); 

XML轉成數組,代碼如下,如果你使用 curl 獲取的 xml data.

  1. $xml = simplexml_load_string($data); 
  2. $data['tk'] = json_decode(json_encode($xml),TRUE); 

如果是直接獲取 URL 數據的話:

  1. $xml = simplexml_load_file($data); 
  2. $data['tk'] = json_decode(json_encode($xml),TRUE); 

先把 simplexml 對象轉換成 json,再將 json 轉換成數組。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亲爱的老师9免费观看全集电视剧| 亚洲女人天堂成人av在线| 久久久久久久久久av| 亚洲欧美成人一区二区在线电影| 久久色在线播放| 蜜臀久久99精品久久久无需会员| 国产精品扒开腿做爽爽爽男男| 久热爱精品视频线路一| 亚洲精品久久久久久久久| 91久久久久久久一区二区| 日本三级久久久| 91久久久久久久一区二区| 中文.日本.精品| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久久亚洲精品视频| 亚洲精品按摩视频| 日韩成人黄色av| 欧美另类在线观看| 国产在线观看精品一区二区三区| 欧美成人精品在线观看| 国产美女主播一区| 国产成人91久久精品| 欧美自拍视频在线观看| 亚洲精品动漫久久久久| 久久久久亚洲精品国产| 成人淫片在线看| 三级精品视频久久久久| 国产精品一区二区久久| 色无极亚洲影院| 亚洲一区二区三区成人在线视频精品| 国内精品久久久久影院优| 亚洲天堂av综合网| 欧美精品www在线观看| 亚洲伊人一本大道中文字幕| 日韩欧美精品网站| 国内精品小视频在线观看| 伊人久久久久久久久久久久久| 8x拔播拔播x8国产精品| 最近日韩中文字幕中文| 538国产精品一区二区免费视频| 色综久久综合桃花网| 欧美另类在线观看| 精品久久久久久中文字幕大豆网| 日韩视频免费观看| 精品女厕一区二区三区| 色偷偷av一区二区三区| 亚洲国产精品悠悠久久琪琪| 精品中文视频在线| 中文字幕日韩免费视频| 在线观看久久久久久| 秋霞成人午夜鲁丝一区二区三区| 91嫩草在线视频| 国产成人精品999| 日韩欧美精品网站| 久久国产精品电影| 亚洲**2019国产| 精品国产成人av| 97精品在线视频| 亚洲国产成人在线播放| 欧美激情中文网| 国产精品视频精品| 亚洲香蕉av在线一区二区三区| 欧美精品久久久久久久免费观看| 国产香蕉精品视频一区二区三区| 啪一啪鲁一鲁2019在线视频| 亚洲伊人第一页| 亚洲视频一区二区| 美女视频黄免费的亚洲男人天堂| 精品人伦一区二区三区蜜桃网站| 欧美福利视频在线| 亚洲欧美制服第一页| 亚洲精品网址在线观看| 在线播放精品一区二区三区| 国产精品久久久久久久久| 国产精品久久久久7777婷婷| 国产美女被下药99| 国产精品国产三级国产aⅴ浪潮| 欧美成人免费va影院高清| 亚洲精品有码在线| 全球成人中文在线| 亚洲全黄一级网站| 日韩一区二区久久久| 欧美精品免费看| 国产精品免费久久久| 日本精品免费观看| 日韩亚洲综合在线| 日韩av在线免播放器| 亚洲女人天堂色在线7777| 国产精品第1页| 欧美激情精品久久久久久久变态| 亚洲成人a级网| 亚洲最大成人在线| 在线视频日韩精品| 国产成人精品av| 中文字幕亚洲专区| 国产亚洲精品美女久久久久| 亚洲成人久久久| 日韩毛片中文字幕| 91爱爱小视频k| 亚洲精品国产拍免费91在线| 成人444kkkk在线观看| 日韩国产中文字幕| 亚洲国产精彩中文乱码av在线播放| www.久久久久久.com| 最近更新的2019中文字幕| 国产一区二区三区精品久久久| 久久综合久中文字幕青草| 日本三级久久久| 日韩av不卡在线| 国产精品免费小视频| 欧美性xxxxxxxxx| 精品久久久精品| www.xxxx欧美| 日韩av大片在线| 精品精品国产国产自在线| 亚洲性线免费观看视频成熟| 久久久久久999| 久久免费在线观看| 欧美巨乳在线观看| 中文字幕日韩在线播放| 亚洲人成网在线播放| 中文字幕亚洲精品| 亚洲精品自拍偷拍| 国产偷亚洲偷欧美偷精品| 亚洲成色777777在线观看影院| 亚洲综合小说区| 亚洲毛茸茸少妇高潮呻吟| 91国产视频在线播放| 亚洲国语精品自产拍在线观看| 日本欧美爱爱爱| 欧美在线免费观看| www国产精品视频| 91av在线精品| 成人在线视频网站| 国产在线观看精品| 亚洲精品在线观看www| 亚洲人成在线观看网站高清| 国内精品久久久久久| 欧美在线观看日本一区| 欧美日韩在线第一页| 中文字幕在线看视频国产欧美在线看完整| 97人人模人人爽人人喊中文字| 日韩精品在线观| 亚洲国产美女精品久久久久∴| 91精品视频免费| 久久精品色欧美aⅴ一区二区| 国产精品视频网站| 久久九九热免费视频| 色老头一区二区三区在线观看| 国产精品香蕉国产| 日韩在线视频观看正片免费网站| 91老司机精品视频| 亚洲热线99精品视频| 国产精品一区=区| 国产精品国产三级国产aⅴ9色| 精品国产一区二区三区久久狼黑人| 欧美日韩综合视频| 久久久久久成人精品| 亚洲国产精久久久久久| 在线免费观看羞羞视频一区二区| 美女扒开尿口让男人操亚洲视频网站| 亚洲精品视频久久| 国内精品伊人久久| 国产亚洲精品久久久久久|