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