xml地图|网站地图|网站标签 [设为首页] [加入收藏]
php 数组转xml的例子
分类:网络频道

图片 1
完整转换代码:

class ArrayToXML
{
 /**
  * The main function for converting to an XML document.
  * Pass in a multi dimensional array and this recrusively loops through and builds up an XML document.
  *
  * @param array $data
  * @param string $rootNodeName - what you want the root node to be - defaultsto data.
  * @param SimpleXMLElement $xml - should only be used recursively
  * @return string XML
  */
 public static function toXml($data, $rootNodeName = 'data', $xml=null)
 {
  // turn off compatibility mode as simple xml throws a wobbly if you don't.
  if (ini_get('zend.ze1_compatibility_mode') == 1)
  {
   ini_set ('zend.ze1_compatibility_mode', 0);
  }

 代码如下

// Xml 转 数组, 不包括根键
function xmltoarray( $xml )
{
    $arr = xml_to_array($xml);
    $key = array_keys($arr);
    return $arr[$key[0]];
}

图片 2

例子1

例子一,将XML转成数组

下面这个可以支持多维数组

function simplexml_obj2array($obj){
      if ($obj instanceof SimpleXMLElement) {
       $obj = (array)$obj;
      }
    
      if (is_array($obj)) {
       $result = $keys = array();
       foreach( $obj as $key=>$value)
       {
        isset($keys[$key]) ? ($keys[$key] += 1) : ($keys[$key] = 1);
    
        if( $keys[$key] == 1 )
        {
         $result[$key] = simplexml_obj2array($value);
        }
        elseif( $keys[$key] == 2 )
        {
         $result[$key] = array($result[$key], simplexml_obj2array($value));
        }
        else if( $keys[$key] > 2 )
        {
         $result[$key][] = simplexml_obj2array($value);
        }
       }
       return $result;
      } else {
       return $obj;
      }
 }
$xml=simplexml_load_file("D:/ www.111cn.net /lib/books.xml");
 
$rss = simplexml_obj2array($xml);

测试代码:test.php

例子三

// 如果输入的数组是全数字键,则将元素值依次传输到 $callback, 否则将自身传输给$callback
function xml_array_each( $arr, $callback )
{
    if(func_num_args()<2) die('parameters error');
    if(!is_array($arr)) die('parameter 1 shuld be an array!');
    if(!is_callable($callback)) die('parameter 2 shuld be an function!');
    $keys = array_keys($arr);
    $isok = true;
    foreach( $keys as $key ) {if(!is_int($key)) {$isok = false; break;}}
    if($isok)
        foreach( $arr as $val ) $result[] = $callback($val);
    else
        $result[] = $callback( $arr );
    return $result;
}

$ob= simplexml_load_string($xmlfile);

处理代码:ArrayToXML.php

 代码如下

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

此时$json变量的值如下:

// Xml 转 数组, 包括根键,忽略空元素和属性,尚有重大错误
function xml_to_array( $xml )
{
    $reg = "/<(\w+)[^>]*?>([\x00-\xFF]*?)<\/\1>/";
    if(preg_match_all($reg, $xml, $matches))
    {
        $count = count($matches[0]);
        $arr = array();
        for($i = 0; $i < $count; $i++)
        {
            $key= $matches[1][$i];
            $val = xml_to_array( $matches[2][$i] );  // 递归
            if(array_key_exists($key, $arr))
            {
                if(is_array($arr[$key]))
                {
                    if(!array_key_exists(0,$arr[$key]))
                    {
                        $arr[$key] = array($arr[$key]);
                    }
                }else{
                    $arr[$key] = array($arr[$key]);
                }
                $arr[$key][] = $val;
            }else{
                $arr[$key] = $val;
            }
        }
        return $arr;
    }else{
        return $xml;
    }
}

下面为网上整理的xml转换数组函数

   // replace anything not alpha numeric
   $key = preg_replace('/[^a-z]/i', '', $key);

图片 3
3、将对象转换为JSON

<?php

例子

  }
  // pass back as string. or simple xml object if you want!
  return $xml->asXML();
 }
}
ArrayToXML.php来源于网络,本人不做任何解释

$json  = json_encode($ob);

  if ($xml == null)
  {
   $xml = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$rootNodeName />");
  }

$xmlfile = file_get_contents($path);

代码
// 类似 XPATH 的数组选择器
function xml_array_select( $arr, $arrpath )
{
    $arrpath = trim( $arrpath, '/' );
    if(!$arrpath) return $arr;
    $self = 'xml_array_select';
   
    $pos = strpos( $arrpath, '/' );
    $pos = $pos ? $pos : strlen($arrpath);
    $curpath = substr($arrpath, 0, $pos);
    $next = substr($arrpath, $pos);
   
    if(preg_match("/\[(\d+)\]$/",$curpath,$predicate))
    {
        $curpath = substr($curpath, 0, strpos($curpath,"[{$predicate[1]}]"));
        $result = $arr[$curpath][$predicate[1]];
    }else $result = $arr[$curpath];
   
    if( is_array($arr) && !array_key_exists($curpath, $arr) )
    {
        die( 'key is not exists:' . $curpath );
    }
   
    return $self($result, $next);
}

 代码如下

   // if there is another array found recrusively call this function
   if (is_array($value))
   {
    $node = $xml->addChild($key);
    // recrusive call.
    ArrayToXML::toXml($value, $rootNodeName, $node);
   }
   else
   {
    // add single node.
    $value = htmlentities($value);
    $xml->addChild($key,$value);
   }

1、读XML文件内容,并保存到字符串变量中

/**
 * 最简单的XML转数组
 * @param string $xmlstring XML字符串
 * @return array XML数组
 */
function simplest_xml_to_array($xmlstring) {
    return json_decode(json_encode((array) simplexml_load_string($xmlstring)), true);
}

现在有一个uncletoo.xml的配置文件,格式如下:

  // loop through the data passed in.
  foreach($data as $key => $value)
  {
   // no numeric keys in our xml please!
   if (is_numeric($key))
   {
    // make string key...
    $key = "unknownNode_". (string) $key;
   }

本文由宝马娱乐在线发布于网络频道,转载请注明出处:php 数组转xml的例子

上一篇:php中操作xml文档程序代码 下一篇:php数组函数序列之array_intersect() 返回两个或多个
猜你喜欢
热门排行
精彩图文