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

时间:2022-09-05 17:29:47

下面是网上的 

复制代码代码如下:


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