PHP中将数组转成XML格式的实现代码

 更新时间:2011年08月08日 18:58:15   作者:  
网上找的一段代码! 然后我自己根据php DOMDocument又写了一段代码,需要的朋友可以参考下。
下面是网上的
复制代码 代码如下:

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);
?>

相关文章

  • 在WAMP环境下搭建ZendDebugger php调试工具的方法

    在WAMP环境下搭建ZendDebugger php调试工具的方法

    一直以来,写php都是用Dreamweaver,有时候真是痛苦啊,出现一个bug,想看一些元素的值,必须用echo输出来才知道,现在了解到一个断点调试利器,php终于也能像java、.NET那样断点调试,这就是——ZendDebugger
    2011-07-07
  • PHP合并数组的2种方法小结

    PHP合并数组的2种方法小结

    大家都知道PHP中两个数组合并可以使用+或者array_merge,但之间还是有区别的,而且这些区别如果了解不清楚项目中会要命的!这篇文章给加总结介绍了PHP合并数组的2种方法,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11
  • php项目中类的自动加载实例讲解

    php项目中类的自动加载实例讲解

    在本篇文章里小编给大家整理的是关于php项目中类的自动加载的实例内容以及相关代码,需要的朋友们学习下。
    2019-09-09
  • PHP 杂谈《重构-改善既有代码的设计》之二 对象之间搬移特性

    PHP 杂谈《重构-改善既有代码的设计》之二 对象之间搬移特性

    承接上文PHP 杂谈《重构-改善既有代码的设计》之 重新组织你的函数 ,继续说重构方面的内容
    2012-04-04
  • 在zblog首页调用不同栏目的列表数据

    在zblog首页调用不同栏目的列表数据

    这篇文章主要介绍了在zblog首页调用不同栏目的列表数据的相关资料,需要的朋友可以参考下
    2022-08-08
  • php empty函数 使用说明

    php empty函数 使用说明

    对于我们做php开发的来说,empty函数(注,其实empty是一个语言结构而非函数,这里说函数只是个人习惯)是再熟悉不过的一个函数了,查PHP的手册描述如下
    2009-08-08
  • php查询ip所在地的方法

    php查询ip所在地的方法

    这篇文章主要介绍了php查询ip所在地的方法,涉及对纯真ip数据库的实用,是非常常见的实用技巧,需要的朋友可以参考下
    2014-12-12
  • 通用PHP动态生成静态HTML网页的代码

    通用PHP动态生成静态HTML网页的代码

    最近研究PHP的一些开发技术,发现PHP有很多ASP所没有的优秀功能,可以完成一些以前无法完成的功能,例如动态生成HTML静态页面,以减少服务器CPU的负载,提高用户访问的速度。
    2010-03-03
  • php递归json类实例

    php递归json类实例

    这篇文章主要介绍了php递归json类的实现方法,可以实现对索引数组及数字数组的解析,进而实现递归数组返回json字符串的功能,需要的朋友可以参考下
    2014-12-12
  • file_get_contents获取不到网页内容的解决方法

    file_get_contents获取不到网页内容的解决方法

    file_get_contents获取不到网页内容的解决方法,需要的朋友可以参考一下
    2013-03-03

最新评论