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
PHP通用检测函数集合
Feb 08 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
Feb 01 PHP
php抽奖小程序的实现代码
Jun 18 PHP
php中替换字符串中的空格为逗号','的方法
Jun 09 PHP
Laravel 5框架学习之用户认证
Apr 09 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
实例讲解PHP表单处理
Feb 15 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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 foreach、while性能比较
2009/10/15 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
popdiv
2006/07/14 Javascript
怎么用javascript进行拖拽
2006/07/20 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
js window.open弹出新的网页窗口
2014/01/16 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
javascript如何定义对象数组
2016/06/07 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
探究JavaScript中的五种事件处理程序方式
2016/12/07 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
js实现简单的随机点名器
2020/09/17 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
Python multiprocessing模块中的Pipe管道使用实例
2015/04/11 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
元旦促销方案
2014/03/15 职场文书
节能减耗标语
2014/06/21 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python
python脚本框架webpy的url映射详解
2021/11/20 Python
对讲机的最大通讯距离是多少
2022/02/18 无线电