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-MySQL教程归纳总结
Jun 07 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
Jun 05 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
Jun 17 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
基于simple_html_dom的使用小结
Jul 01 PHP
PHP goto语句简介和使用实例
Mar 11 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
Apr 24 PHP
PHP定时任务延缓执行的实现
Oct 08 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
解决laravel5.4下的group by报错的问题
Oct 16 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文件上传实例详解!!!
2007/01/02 PHP
php 定界符格式引起的错误
2011/05/24 PHP
php数据类型判断函数有哪些
2013/09/23 PHP
php实现微信公众号无限群发
2015/10/11 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
详解Vue方法与事件
2017/03/09 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
Python3写入文件常用方法实例分析
2015/05/22 Python
Python实现股市信息下载的方法
2015/06/15 Python
Python内置函数OCT详解
2016/11/09 Python
Django中Forms的使用代码解析
2018/02/10 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
北京天润融通.net面试题笔试题
2012/02/20 面试题
const和static readonly区别
2013/05/20 面试题
Shell如何接收变量输入
2012/09/24 面试题
应聘教师求职信
2014/07/19 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
golang生成vcf通讯录格式文件详情
2022/03/25 Golang
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript