Как получить ошибки разбора с DomDocument :: loadXML ()

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

try{
$xml=new \DOMDocument('1.0','utf-8');
$xml->loadXML(file_get_contents($file),
}catch (\Exception $e){
echo $e->getMessage());
}

Теперь мне действительно нужно сгенерировать исключение для ошибок разбора. Я пытался пройти опции загрузитьXML

LIBXML_ERR_ERROR|LIBXML_ERR_FATAL|LIBXML_ERR_WARNING

опять не повезло. Пожалуйста, объясните мне, как отлавливать все эти ошибки разбора.

Как предложено @Ghost в комментариях, я нашел это решение

abstract class XmlReadStrategy extends AbstractReadStrategy
{

/** @var  array */
protected $importAttributes;

/**
* @param $fileFullPath
* @param $fileName
*/
public function __construct($fileFullPath,$fileName)
{
parent::__construct($fileFullPath,$fileName);
libxml_use_internal_errors(true);
}

/**
*
*/
protected function handleXmlException(){
$this->dataSrc=array();
foreach(libxml_get_errors() as $e){
$this->logger->append(Logger::ERROR,'[Error] '.$e->message);
}
}

/**
* Import xml file
* @param string $file
* @throws \Exception
*/
protected function loadImportFileData($file)
{
try{
$xml=new \DOMDocument('1.0','utf-8');
if(!$xml->loadXML(file_get_contents($file))){
$this->handleXmlException();
}
$this->dataSrc=$this->nodeFilter($xml);
}catch (\Exception $e){
$this->logger->append(Logger::ERROR,$e->getMessage());
$this->dataSrc=array();
}
}

....
}

Так что хитрость заключается в том, чтобы позвонить libxml_use_internal_errors(true); а затем проверьте состояние loadXML (), например

if(!$xml->loadXML(file_get_contents($file))){
$this->handleXmlException();
}

Я не знаю, если это libxml_use_internal_errors(true); пока что имеет побочный эффект

5

Решение

Вы можете включить libxml_use_internal_errors и получить ошибки с libxml_get_errors ()

  libxml_use_internal_errors(true);
$xml = new DOMDocument('1.0','utf-8');

if ( !$xml->loadxml(file_get_contents($file)) ) {
$errors = libxml_get_errors();
var_dump($errors);
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector