2014-10-15 31 views
5

Próbuję załadować xml, który ma niedopasowane znaczniki i oczekiwałem, że coś takiego zadziała, ale bez powodzenia.Jak uzyskać błędy analizy za pomocą DomDocument :: loadXML()

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

Teraz naprawdę muszę rzucić wyjątek dla błędów analizy. Próbowałem przekazać options do loadXML

LIBXML_ERR_ERROR|LIBXML_ERR_FATAL|LIBXML_ERR_WARNING 

ponownie bez powodzenia. Proszę mnie wskazać, jak złapać wszystkie te błędy parsowania.

Edit

Jak sugeruje @Ghost w komentarzach, doszedłem wokół tego rozwiązania

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(); 
     } 
    } 

.... 
} 

Więc Sztuką jest, aby zadzwonić libxml_use_internal_errors(true); a następnie sprawdzić loadXML() Status np

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

Nie wiem, czy ten libxml_use_internal_errors(true); ma jakikolwiek efekt uboczny do tej pory

+0

może związanego http://stackoverflow.com/questions/10025247/libxml-error-handler-with-oop – Ghost

+0

dzięki @Ghost :) – sakhunzai

+0

pewno nie człowiek prob – Ghost

Odpowiedz