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+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
解决ajax+php中文乱码的方法详解
Jun 09 PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
Jul 29 PHP
深入解析PHP中foreach语句控制数组循环的用法
Nov 30 PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 PHP
PHP配置ZendOpcache插件加速
Feb 14 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 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
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
《与象共舞》教学反思
2014/02/24 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
学校与家长安全责任书
2014/07/23 职场文书
技术股东合作协议书
2014/12/02 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
详解Redis基本命令与使用场景
2021/06/01 Redis
springboot临时文件存储目录配置方式
2021/07/01 Java/Android