当前位置:首页 > PHP教程 > php数组 > 列表

php 数组转xml的例子

发布:smiling 来源: PHP粉丝网  添加日期:2016-07-15 15:57:25 浏览: 评论:0 

数组转xml用到不多用数组转json比较多了,但今天有一个功能就是必须要把数组转换成xml了,下面小编人网上找到了一段关于php 数组转xml的代码测试了都可以使用,下面整理分享给各位。

例子1:

下面这个可以支持多维数组,测试代码:test.php

  1. <?php 
  2. include './ArrayToXML.php'
  3. header('Content-Type:   text/xml'); 
  4. $data=array("name"=>"zhangsan","sex"=>"0","address"=>array("sheng"=>"chongqing","shi"=>"nanchuan","zhen"=>"daguan")); 
  5. echo ArrayToXML::toXml($data); 
  6. ?> 

处理代码:ArrayToXML.php

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

ArrayToXML.php来源于网络,本人不做任何解释.

例子2:

  1. // Xml 转 数组, 包括根键,忽略空元素和属性,尚有重大错误 
  2. function xml_to_array( $xml ) 
  3.     $reg = "/<(\\w+)[^>]*?>([\\x00-\\xFF]*?)<\\/\\1>/"
  4.     if(preg_match_all($reg$xml$matches)) 
  5.     { 
  6.         $count = count($matches[0]); 
  7.         $arr = array(); 
  8.         for($i = 0; $i < $count$i++) 
  9.         { 
  10.             $key$matches[1][$i]; 
  11.             $val = xml_to_array( $matches[2][$i] );  // 递归 
  12.             if(array_key_exists($key$arr)) 
  13.             { 
  14.                 if(is_array($arr[$key])) 
  15.                 { 
  16.                     if(!array_key_exists(0,$arr[$key])) 
  17.                     { 
  18.                         $arr[$key] = array($arr[$key]); 
  19.                     } 
  20.                 }else
  21.                     $arr[$key] = array($arr[$key]); 
  22.                 } 
  23.                 $arr[$key][] = $val
  24.             }else
  25.                 $arr[$key] = $val
  26.             } 
  27.         } 
  28.         return $arr
  29.     }else
  30.         return $xml
  31.     } 
  32. // Xml 转 数组, 不包括根键 
  33. function xmltoarray( $xml ) 
  34.     $arr = xml_to_array($xml); 
  35.     $key = array_keys($arr); 
  36.     return $arr[$key[0]]; 
  37. // 类似 XPATH 的数组选择器 
  38. function xml_array_select( $arr$arrpath ) 
  39.     $arrpath = trim( $arrpath'/' ); 
  40.     if(!$arrpathreturn $arr
  41.     $self = 'xml_array_select'
  42.      
  43.     $pos = strpos$arrpath'/' ); 
  44.     $pos = $pos ? $pos : strlen($arrpath); 
  45.     $curpath = substr($arrpath, 0, $pos); 
  46.     $next = substr($arrpath$pos); 
  47.      
  48.     if(preg_match("/\\[(\\d+)\\]$/",$curpath,$predicate)) 
  49.     { 
  50.         $curpath = substr($curpath, 0, strpos($curpath,"[{$predicate[1]}]")); 
  51.         $result = $arr[$curpath][$predicate[1]]; 
  52.     }else $result = $arr[$curpath]; 
  53.      
  54.     ifis_array($arr) && !array_key_exists($curpath$arr) ) 
  55.     { 
  56.         die'key is not exists:' . $curpath ); 
  57.     } 
  58.      
  59.     return $self($result$next); 
  60. // 如果输入的数组是全数字键,则将元素值依次传输到 $callback, 否则将自身传输给$callback 
  61. function xml_array_each( $arr$callback ) 
  62.     if(func_num_args()<2) die('parameters error'); 
  63.     if(!is_array($arr)) die('parameter 1 shuld be an array!'); 
  64.     if(!is_callable($callback)) die('parameter 2 shuld be an function!'); 
  65.     $keys = array_keys($arr); 
  66.     $isok = true; 
  67.     foreach$keys as $key ) {if(!is_int($key)) {$isok = false; break;}} 
  68.     if($isok
  69.         foreach$arr as $val ) $result[] = $callback($val); 
  70.     else 
  71.         $result[] = $callback$arr ); 
  72.     return $result
  73. /** 
  74.  * 最简单的XML转数组 
  75.  * @param string $xmlstring XML字符串 
  76.  * @return array XML数组 
  77.  */ 
  78. function simplest_xml_to_array($xmlstring) { 
  79.     return json_decode(json_encode((array) simplexml_load_string($xmlstring)), true); 

Tags: 数组 例子

分享到: