The following function presents a simple approach to convert PHP arrays to their XML counterpart. It supports nested arrays too. Internally, it uses SimpleXMLElement to do the actual work.
/**
* @param array $array the array to be converted
* @param string? $rootElement if specified will be taken as root element, otherwise defaults to
* <root>
* @param SimpleXMLElement? if specified content will be appended, used for recursion
* @return string XML version of $array
*/
function arrayToXml($array, $rootElement = null, $xml = null) {
$_xml = $xml;
if ($_xml === null) {
$_xml = new SimpleXMLElement($rootElement !== null ? $rootElement : '<root/>');
}
foreach ($array as $k => $v) {
if (is_array($v)) { //nested array
arrayToXml($v, $k, $_xml->addChild($k));
} else {
$_xml->addChild($k, $v);
}
}
return $_xml->asXML();
}
Examples are:
echo arrayToXml(array('testOne' => 'xml'));
echo arrayToXml(array('testOne' => array('testOneInner' => 'content')));
echo arrayToXml(array('testOne' => array('testOneInner' => 'content'), 'testTwo' => 'content'));
echo arrayToXml(array('testOne' => array('testOneInner' => array('testOneInnerInner' => 'content')), 'testTwo' => 'content'));
echo arrayToXml(array('testOne' => array('testOneInner' => array('testOneInnerInner' => 'content')), 'testTwo' => array('testTwoInner' => array('testTwoInnerInner' => 'content'))));
which produces:
<?xml version="1.0"?> <root><testOne>xml</testOne></root> <?xml version="1.0"?> <root><testOne><testOneInner>content</testOneInner></testOne></root> <?xml version="1.0"?> <root><testOne><testOneInner>content</testOneInner></testOne><testTwo>content</testTwo></root> <?xml version="1.0"?> <root><testOne><testOneInner><testOneInnerInner>content</testOneInnerInner></testOneInner></testOne><testTwo>content</testTwo></root> <?xml version="1.0"?> <root><testOne><testOneInner><testOneInnerInner>content</testOneInnerInner></testOneInner></testOne><testTwo><testTwoInner><testTwoInnerInner>content</testTwoInnerInner></testTwoInner></testTwo></root>

Leave a Reply