Пример скрипта, который перебирает все XML файлы в директории и сохраняет их в XLSX.
Стоит учесть, что XML это название формата и структура у XML файлов совершенно разная. Скрипт ниже можно рассматривать только в виде набора примеров и решений, на основе которого можно решить свою задачу.
Для работы требуется PHPExcel 1.8+.
<?
error_reporting(E_ALL);
ini_set('display_errors', 'On');
require_once ('lib/PHPExcel/PHPExcel.php');
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$filelist = glob('in/*.xml');
$FL = 'A'; // First Leter
$iLine = 1;
$objPHPExcel->getActiveSheet()
->setCellValue(($FL++).$iLine, 'File')
->setCellValue(($FL++).$iLine, 'Area')
->setCellValue(($FL++).$iLine, 'FamilyName')
->setCellValue(($FL++).$iLine, 'FirstName')
->setCellValue(($FL++).$iLine, 'Patronymic')
->setCellValue(($FL++).$iLine, 'OldNumber')
->setCellValue(($FL++).$iLine, 'Apartment')
;
$j = 0;
$iLine = 2;
foreach($filelist as $sFile)
{
if( in_array($sFile, array(
'in/kv_5d3761ef-fa33-4a67-ac29-d50953552a39.xml',
'in/kv_9337d158-00fc-42b4-817a-cdfd1792177e.xml'
)))
{
continue;
}
echo $sFile.'<br/>';
//$oXml = simplexml_load_file($sFile);
$sText = file_get_contents($sFile);
$sText = str_replace('<adrs:', '<adrs_', $sText);
$sText = str_replace('</adrs:', '</adrs_', $sText);
$sText = str_replace('<num:', '<num_', $sText);
$sText = str_replace('</num:', '</num_', $sText);
$oXml = new SimpleXMLElement($sText);
$Area = $oXml->Realty->Flat->Area;
$FamilyName = @$oXml->Realty->Flat->Rights->Right->Owners->Owner->Person->FamilyName;
$FirstName = @$oXml->Realty->Flat->Rights->Right->Owners->Owner->Person->FirstName;
$Patronymic = @$oXml->Realty->Flat->Rights->Right->Owners->Owner->Person->Patronymic;
$aAttr = $oXml->Realty->Flat->OldNumbers->num_OldNumber->attributes();
$Number1 = $aAttr['Number'];
$aAttr = $aAttr = $oXml->Realty->Flat->Address->adrs_Apartment->attributes();
$Number2 = $aAttr['Value'];
$FL = 'A'; // First Leter
$objPHPExcel->getActiveSheet()
->setCellValue(($FL++).$iLine, str_replace('in/', '', $sFile))
->setCellValue(($FL++).$iLine, $Area)
->setCellValue(($FL++).$iLine, $FamilyName)
->setCellValue(($FL++).$iLine, $FirstName)
->setCellValue(($FL++).$iLine, $Patronymic)
->setCellValue(($FL++).$iLine, $Number1)
->setCellValue(($FL++).$iLine, $Number2)
;
$iLine++;
/*
<num:OldNumber Type="01" Number="6" />
$out_ns = $oXml->Realty->Flat->OldNumbers;
$ns = $out_ns->getNamespaces(true);
$child = $out_ns->children($ns['num']);
*/
/*
echo '<pre>';
print_r($oXml);
echo '</pre>';
//*/
$j++;
/*
if($j > 1)
{
break;
}
//*/
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('out.xlsx');