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 相关文章推荐
桌面中心(二)数据库写入
Oct 09 PHP
无数据库的详细域名查询程序PHP版(1)
Oct 09 PHP
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
May 26 PHP
PHP注释实例技巧
Oct 03 PHP
Cakephp 执行主要流程
Mar 24 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
解决cPanel无法安装php5.2.17
Jun 22 PHP
PHP实现的QQ空间g_tk加密算法
Jul 09 PHP
百度地图API使用方法详解
Aug 25 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
PHP中上传文件打印错误错误类型分析
Apr 14 PHP
thinkphp5框架路由原理与用法详解
Feb 11 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
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
Python open读写文件实现脚本
2008/09/06 Python
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
使用python实现画AR模型时序图
2019/11/20 Python
Python遍历字典方式就实例详解
2019/12/28 Python
python中实现栈的三种方法
2020/12/19 Python
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
一套PHP的笔试题
2013/05/31 面试题
对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中
2015/06/22 面试题
超市营业员求职简历的自我评价
2013/10/17 职场文书
六一儿童节主持词
2014/03/21 职场文书
后备干部培训方案
2014/05/22 职场文书
书法大赛策划方案
2014/06/04 职场文书
祝寿主持词
2015/07/02 职场文书
交通安全温馨提示语
2015/07/14 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS