Suggest a feature
×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: PHP
Posted by: Сергей Шевченко
Added: Feb 1, 2019 2:00 PM
Views: 39
Tags: php xml xslt
  1. /**
  2.  * Преобразование XML в массив через XSLT
  3.  * @param SimpleXMLElement|string $inputXml Исходный XML
  4.  * @param string $inputXsltName Имя XSLT файла (относительно каталога XSLT, без расширения)
  5.  * @return array
  6.  * @throws Exception
  7.  */
  8. protected function convertPacket($inputXml, $inputXsltName)
  9. {
  10.     $errorReporting = libxml_use_internal_errors(true);
  11.     $inputXslt = simplexml_load_file(APPLICATION_PATH.'/../xslt/'.$inputXsltName.'.xsl');
  12.     libxml_use_internal_errors($errorReporting);
  13.     if (!$inputXslt) {
  14.         $lastError = libxml_get_last_error();
  15.         throw new Exception('Не загружена таблица xml преобразований: '.$lastError->message);
  16.     }
  17.     $xslt = new XSLTProcessor();
  18.     if (!$xslt->importStylesheet($inputXslt)) {
  19.         throw new Exception('Ошибка обработки таблица xml преобразований');
  20.     }
  21.     if (!$inputXml instanceof SimpleXMLElement) {
  22.         $inputXml = new SimpleXMLElement(trim($inputXml), LIBXML_PARSEHUGE);
  23.     }
  24.     $rawData = $xslt->transformToXml($inputXml);
  25.     // logVar($rawData, 'confirmation raw data');
  26.     $xmlResult = simplexml_load_string($rawData);
  27.     $resultData = simplexml2array($xmlResult);
  28.     if (!isset($resultData['data'])) {
  29.         throw new Exception('Невозможно преобразовать в ожидаемый формат полученный ответ ' . $rawData);
  30.     }
  31.     return $resultData;
  32. }