我正在尝试加载具有不匹配标签的xml,我希望这样的东西可以工作但没有运气。
try{
$xml=new \DOMDocument('1.0','utf-8');
$xml->loadXML(file_get_contents($file),
}catch (\Exception $e){
echo $e->getMessage());
}
现在我真的需要为解析错误抛出异常。我试图将options传递给loadXML
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);
到目前为止是否有任何副作用
答案 0 :(得分:3)
您可以启用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);
}