/** * Преобразование XML в массив через XSLT * @param SimpleXMLElement|string $inputXml Исходный XML * @param string $inputXsltName Имя XSLT файла (относительно каталога XSLT, без расширения) * @return array * @throws Exception */ protected function convertPacket($inputXml, $inputXsltName) { $errorReporting = libxml_use_internal_errors(true); $inputXslt = simplexml_load_file(APPLICATION_PATH.'/../xslt/'.$inputXsltName.'.xsl'); libxml_use_internal_errors($errorReporting); if (!$inputXslt) { $lastError = libxml_get_last_error(); throw new Exception('Не загружена таблица xml преобразований: '.$lastError->message); } $xslt = new XSLTProcessor(); if (!$xslt->importStylesheet($inputXslt)) { throw new Exception('Ошибка обработки таблица xml преобразований'); } if (!$inputXml instanceof SimpleXMLElement) { $inputXml = new SimpleXMLElement(trim($inputXml), LIBXML_PARSEHUGE); } $rawData = $xslt->transformToXml($inputXml); // logVar($rawData, 'confirmation raw data'); $xmlResult = simplexml_load_string($rawData); $resultData = simplexml2array($xmlResult); if (!isset($resultData['data'])) { throw new Exception('Невозможно преобразовать в ожидаемый формат полученный ответ ' . $rawData); } return $resultData; }