potresti inserire dei valori senza chiarvi che lui dovrebbe andare ad inserire come chiavi numeriche in questo modo, se la chiave è SOLO numerica (non penso ti servano tag il cui nome è solo numeri) gli fai inserire direttamente il valore

come mai hai tolto la codifica UTF8 dai nomi dei tag? tanto non nuoce

elseif($key=="__solo__")

lo potresti cambiare in

elseif(is_numeric($key) === true)

o meglio ancora

Codice PHP:
function generateXMLfromArray($array)
{
  
$xml '';
  foreach(
$array as $key=>$value)
  {
    if (
is_numeric($key) === true)
    {
      
$xml .= utf_encode($value)
    }
    else
    {
      
$xml .= '<' utf8_encode($key) . '>';
      if (
is_array($value) === true)
      {
        
$xml .= generateXMLfromArray($value);
      }
      else
      {
        
$xml .= utf8_encode($value);
      }
      
$xml .= '</' utf8_encode($key) . '>';
    }
  }
  return 
$xml;