加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php源码之将数组转化为xml

发布时间:2020-05-30 19:16:32 所属栏目:PHP 来源:互联网
导读:经常遇到数组转xml的需求,实现方法有很多种,但原理基本都是借助第三方的类库,今天小编向大家介绍自己写的一个php数组转化为xml的实现源码,具有一定的参考价值,需要的朋友可以参考一下。

第一种方法:源码如下。

$elementLevel = 0 ;

function array_Xml($array,$keys = '')

{

global $elementLevel;

if(!is_array($array))

{

if($keys == ''){

return $array;

}else{

return "n<$keys>" . $array . "n";

}

}else{

foreach ($array as $key => $value)

{

$haveTag = true;

if (is_numeric($key))

{

$key = $keys;

$haveTag = false;

}

/* http://www.manongjc.com/article/1586.html */

if($elementLevel == 0 )

{

$startElement = "<$key>";

$endElement = "";

}

$text .= $startElement;

if(!$haveTag)

{

$elementLevel++;

$text .= "<$key>" . array_Xml($value,$key). "n";

}else{

$elementLevel++;

$text .= array_Xml($value,$key);

}

$text .= $endElement;

}

}

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

?>

第二种方法:

这种方法可以支持多维数组

test.php

include './ArrayToXML.php';

header('Content-Type: text/xml');

$data=array("name"=>"zhangsan","sex"=>"0","address"=>array("sheng"=>"chongqing","shi"=>"nanchuan","zhen"=>"daguan"));

echo ArrayToXML::toXml($data);

?>

处理代码:ArrayToXML.php

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)

{

// http://www.manongjc.com

ini_set ('zend.ze1_compatibility_mode',0);

}

if ($xml == null)

{

$xml = simplexml_load_string("<$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();

}

}

上面两种方法都可以实现将数组转化为xml,希望对大家有一定的帮助。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读