PHP中将数组转成XML格式的实现代码


Posted in PHP onAugust 08, 2011

下面是网上的

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); 
} 
if ($xml == null) 
{ 
$xml = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$rootNodeName />"); 
} 
// 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; 
} 
// replace anything not alpha numeric 
$key = preg_replace('/[^a-z]/i', '', $key); 
// 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); 
} 
} 
// pass back as string. or simple xml object if you want! 
return $xml->asXML(); 
} 
}

下面是我编辑过的代码
function arrtoxml($arr,$dom=0,$item=0){ 
if (!$dom){ 
$dom = new DOMDocument("1.0"); 
} 
if(!$item){ 
$item = $dom->createElement("root"); 
$dom->appendChild($item); 
} 
foreach ($arr as $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格式
<? 
$elementLevel = 0 ; 
function array_Xml($array, $keys = '') 
{ 
global $elementLevel; 
if(!is_array($array)) 
{ 
if($keys == ''){ 
return $array; 
}else{ 
return "\n<$keys>" . $array . "</$keys>"; 
} 
}else{ 
foreach ($array as $key => $value) 
{ 
$haveTag = true; 
if (is_numeric($key)) 
{ 
$key = $keys; 
$haveTag = false; 
} 
/** 
* The first element 
*/ 
if($elementLevel == 0 ) 
{ 
$startElement = "<$key>"; 
$endElement = "</$key>"; 
} 
$text .= $startElement."\n"; 
/** 
* Other elements 
*/ 
if(!$haveTag) 
{ 
$elementLevel++; 
$text .= "<$key>" . array_Xml($value, $key). "</$key>\n"; 
}else{ 
$elementLevel++; 
$text .= array_Xml($value, $key); 
} 
$text .= $endElement."\n"; 
} 
} 
return $text; 
} 
?>

函数描述及例子
<? 
$array = array( 
"employees" => array( 
"employee" => array( 
array( 
"name" => "name one", 
"position" => "position one" 
), 
array( 
"name" => "name two", 
"position" => "position two" 
), 
array( 
"name" => "name three", 
"position" => "position three" 
) 
) 
) 
); 
echo array_Xml($array); 
?>
PHP 相关文章推荐
PHP 多维数组的排序问题 根据二维数组中某个项排序
Nov 09 PHP
php array的学习笔记
May 10 PHP
解析dedeCMS验证码的实现代码
Jun 07 PHP
php异常处理使用示例
Feb 25 PHP
PHP函数in_array()使用详解
Aug 20 PHP
thinkphp实现like模糊查询实例
Oct 29 PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
php根据命令行参数生成配置文件详解
Mar 15 PHP
PHP Trait功能与用法实例分析
Jun 03 PHP
PHP程序开发范例学习之表单 获取文本框的值
Aug 08 #PHP
php记录日志的实现代码
Aug 08 #PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 #PHP
php学习笔记(三)操作符与控制结构
Aug 06 #PHP
PHP几个数学计算的内部函数学习整理
Aug 06 #PHP
PHP缓存技术的使用说明
Aug 06 #PHP
PHP header函数分析详解
Aug 06 #PHP
You might like
星际争霸秘籍
2020/03/04 星际争霸
关于时间计算的结总
2006/12/06 PHP
php中常用编辑器推荐
2007/01/02 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
PHP单文件上传原理及上传函数的封装操作示例
2019/09/02 PHP
PHP反射基础知识回顾
2020/09/10 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
Python的UTC时间转换讲解
2019/02/26 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
python和JavaScript哪个容易上手
2020/06/23 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
质检部部长职责
2013/12/16 职场文书
迟到检讨书1000字
2014/01/15 职场文书
考试违纪检讨书
2014/02/02 职场文书
法律进机关实施方案
2014/03/12 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
毕业生求职信范文
2014/06/29 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
浅谈PHP7中的一些小技巧
2021/05/29 PHP
Nginx的基本概念和原理
2022/03/21 Servers