Функция генерирующая создание xml-файла из массива данных

Иногда возникает необходимость создать xml-файл из данных, представленных в формате массива. Данная функция помогает быстро решить данную задачу

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']));
Кількість показів: 16
18.09.2022

Повернення до списку

Если вам была полезна статья можете отблагодарить автора: