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]];
}
例子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);
<?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的例子