Yo tengo hecho esto. La estructura del array de datos tenía algo particular que no recuerdo bien lo que era. Te he puesto unos ejemplos que funcionan.
   Código PHP:
    function CrearXml($array_datos)
{
    $XmlWriter = new XmlWriter();
    $XmlWriter->openMemory();
    $XmlWriter->startDocument('1.0', 'UTF-8');
    $XmlWriter->startElement('roomstaycandidate');
    Write($XmlWriter, $array_datos);
    $XmlWriter->endElement();
    return $XmlWriter->outputMemory(true);
}
 
function Write(XMLWriter $XmlWriter, $array_datos)
{
    foreach($array_datos as $key=>$value)
    {
        if(is_array($value))
        {
            if(!is_int($key)){
                $XmlWriter->startElement($key);
            }
            Write($XmlWriter, $value);
            if(!is_int($key)){
                $XmlWriter->endElement();
            }
            continue;
        }
 
        $XmlWriter->writeElement($key, $value);
    }
}
 
$array_datos = array("a"=>
                        array("b"
                                =>"c"));
 
echo htmlentities(CrearXml($array_datos));
 
$array_datos = array("a"=>array("b"=>"c",
                                "d"=>"e"));
 
echo htmlentities(CrearXml($array_datos));
 
$array_datos = array ('a' =>
                            array ('b' =>
                                        array (0 =>array ('c' =>array ('d' => 'e')),
                                                1 => array ('f' => 'g',
                                                          'h' => 'i',)
                                                    )
                                                  )
                                                );
 
 
echo htmlentities(CrearXml($array_datos));