Se você quiser tentar outra maneira, talvez use o Magento \ Framework \ Filesystem \ Io \ File e Magento \ Framework \ Convert \ ConvertArray. O ConvertArray é útil para criar um arquivo xml a partir de uma matriz multidimensional e o File pode gravá-lo para você (e verificar permissões, criar diretórios e mais). Aqui está um exemplo básico:
public function __construct(
\Magento\Framework\Filesystem\Io\File $file,
\Magento\Framework\Convert\ConvertArray $convertArray
)
{
$this->file = $file;
$this->convertArray = $convertArray;
}
public function createMyXmlFile($assocArray, $rootNodeName, $filename = 'file.xml')
{
// ConvertArray function assocToXml to create SimpleXMLElement
$simpleXmlContents = $this->convertArray->assocToXml($assocArray,rootNodeName);
// convert it to xml using asXML() function
$content = $simpleXmlContents->asXML();
$this->file->write($filename, $contents);
}
se minha matriz for:
$myArray = array(
'fruit' => 'apple',
'vegetables' => array('vegetable_1' => 'carrot', 'vegetable_2' => 'tomato'),
'meat' => 'none',
'sweets' => 'chocolate');
e eu chamo minha função:
$simpleXmlContents = $this->convertArray->assocToXml($myArray, 'diner');
$this->file->write($myXmlFile,$simpleXmlContents->asXML());
Eu obteria o seguinte em myfile.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<diner><fruit>apple</fruit><vegetables><vegetable_1>carrot</vegetable_1>
<vegetable_2>tomato</vegetable_2></vegetables><meat>none</meat>
<sweets>chocolate</sweets></diner>