Пример php скрипта для конвертации XML в XLSX

28.09.2017

Пример скрипта, который перебирает все XML файлы в директории и сохраняет их в XLSX.

Стоит учесть, что XML это название формата и структура у XML файлов совершенно разная. Скрипт ниже можно рассматривать только в виде набора примеров и решений, на основе которого можно решить свою задачу.

Для работы требуется PHPExcel 1.8+.

index.php (Download)

 <? 

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


Пометки: сохранение XML в XLSX
Яндекс.Метрика