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 相关文章推荐
wiki-shan写的php在线加密的解密程序
Sep 07 PHP
php 301转向实现代码
Sep 18 PHP
ThinkPHP采用模块和操作分析
Apr 18 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
Jun 17 PHP
PHP flock 文件锁详细介绍
Dec 29 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
探讨php中header的用法详解
Jun 07 PHP
PHP实现股票趋势图和柱形图
Feb 07 PHP
又十个超级有用的PHP代码片段
Sep 24 PHP
PHP 数组基本操作方法详解
Jun 17 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
Mar 01 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
Feb 26 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
德生PL660的电路分析和打磨
2021/03/02 无线电
php判断变量类型常用方法
2012/04/24 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
js版本A*寻路算法
2006/12/22 Javascript
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
Vue 2.0 中依赖注入 provide/inject组合实战
2019/06/20 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
简单理解Python中基于生成器的状态机
2015/04/13 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
Python中@property的理解和使用示例
2019/06/11 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
在django模板中实现超链接配置
2019/08/21 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
求高于平均分的学生学号及成绩
2016/09/01 面试题
商务英语专业毕业生自荐信
2013/11/05 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
python多次执行绘制条形图
2022/04/20 Python
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技