Isso eu uso para codificação Array- ou um JSON-Object em XML.
O param $ obj representa o objeto fornecido, nesse caso é um Array ou um JSON.
O segundo parâmetro é o nível $ que é usado para obter a profundidade do elemento em XML, que é usado recursivamente para obter também os objetos associativos.
function XMLEncode($obj, $level = 1, $xml = NULL)
{
if(!$obj){
return FALSE;
}
if($level==1)
{
$xml .= '<?xml version="1.0" encoding="ISO-8859-1"?>'."n";
}
if(is_array($obj) || is_object($obj)) {
foreach ($obj as $key => $value)
{
$key = strtolower($key);
if($level>1)
{
$node = $xml;
}
$xml .= sprintf(str_repeat("t", $level).'<%s>', $key);
if (is_array($value) || is_object($value))
{
$xml .= XMLEncode($value, $level+1);
}
else
{
if (trim($value) != NULL)
{
if (htmlspecialchars($value) != $value)
{
$xml .= str_repeat("t",$level)."<![CDATA[$value]]>n";
}
else
{
$xml .= str_repeat("t",$level)."$valuen";
}
}
}
$xml .= sprintf(str_repeat("t",$level).'</%s>', $key);
}
return $xml;
}
else
{
return (string)$obj;
}
return $obj;
}