function createXmlFile($fileName,$rows){
$resultFile = '/upload/export_xmls/'.$fileName.'.xml';
$file = new IO\File(Application::getDocumentRoot() . $resultFile);
$file->putContents('');
$export = new \Bitrix\Main\XmlWriter([
'file' => $resultFile, // относительный путь к создаваемому файлу, файл отсутствует и установлен параметр 'create_file', то он будет автоматически создан
'create_file' => true, //создавать ли файл, или продолжить запись в уже созданный. В данном случае каждый раз будет создаваться и перезаписываться новый файл
'charset' => 'UTF-8', //кодировка файла
'lowercase' => false //приводить ли все теги к нижнему регистру
]);
$export->openFile();
$export->writeBeginTag(ucfirst($fileName));
foreach ($rows as $row){
$export->writeBeginTag('Item');
foreach ($row as $col=>$value){
if(is_array($value)){
$export->writeBeginTag($col);
foreach ($value as $v){
if(is_array($v)){
$txt = [];
foreach ($v as $k=>$vt){
$txt[] = $k.'='.'"'.$vt.'"';
}
$export->writeFullTag('value '.implode(' ',$txt),'');
} else {
$export->writeFullTag('value v="'.$v.'"','');
}
}
$export->writeEndTag($col);
} else {
$export->writeFullTag($col, $value);
}
}
$export->writeEndTag('Item');
}
$export->writeEndTag(ucfirst($fileName));
$export->closeFile();
echo $resultFile;
}
И небольшой пример передачи нужной информации в такую функцию:
createXmlFile('brands',array_map(function ($item){
return [
'slug'=>$item['slug'],
'name'=>$item['name'],
'name_en'=>$item['name_en'],
'logo'=>$item['logo'],
];
},$arBrands['ITEMS']));
