Home  >  Article  >  Backend Development  >  Implementation code for converting arrays into XML format in PHP

Implementation code for converting arrays into XML format in PHP

高洛峰
高洛峰Original
2016-12-22 15:19:461084browse

The following is from the Internet

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=&#39;1.0&#39; encoding=&#39;utf-8&#39;?><$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(&#39;/[^a-z]/i&#39;, &#39;&#39;, $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(); 
} 
}

The following is the code I edited

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

Convert array to XML format

<? 
$elementLevel = 0 ; 
function array_Xml($array, $keys = &#39;&#39;) 
{ 
global $elementLevel; 
if(!is_array($array)) 
{ 
if($keys == &#39;&#39;){ 
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; 
} 
?>

Function description and examples

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


More implementation codes related to converting arrays to XML format in PHP Please pay attention to the PHP Chinese website for articles!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn