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程序中的常见漏洞进行攻击
Oct 09 PHP
DedeCMS dede_channeltype表字段注释
Apr 07 PHP
PHP中的array数组类型分析说明
Jul 27 PHP
php上传文件,创建递归目录的实例代码
Oct 18 PHP
php 生成短网址原理及代码
Jan 23 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
PHP MVC框架skymvc支持多文件上传
May 26 PHP
php 使用redis锁限制并发访问类示例
Nov 02 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
php中上传文件的的解决方案
Sep 25 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
Mar 01 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
php中数组首字符过滤功能代码
2012/07/31 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
smarty模板数学运算示例
2016/12/11 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
Python中的字符串类型基本知识学习教程
2016/02/04 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
Python IDLE清空窗口的实例
2018/06/25 Python
python连接mongodb密码认证实例
2018/10/16 Python
python3下载抖音视频的完整代码
2019/06/05 Python
Django如何将URL映射到视图
2019/07/29 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
食堂员工工作职责
2013/12/18 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
财务部总监岗位职责
2014/03/12 职场文书
新教师培训心得体会
2014/09/02 职场文书
初中学习计划书范文
2014/09/15 职场文书
心理健康教育主题班会
2015/08/13 职场文书
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android