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
może związanego http://stackoverflow.com/questions/10025247/libxml-error-handler-with-oop – Ghost
dzięki @Ghost :) – sakhunzai
pewno nie człowiek prob – Ghost