如何在PHP中跳过带有不完整结束标记的无效XML文件

时间:2017-06-08 12:33:39

标签: php xml xml-parsing

我正在使用 PHP DOM Xpath 来读取XML文件。在某些情况下,标签未正确关闭,如下所示

<data>
   <name> value </name>
   <address

我有以下代码检查XML是否有效

$doc = new DOMDocument();

if(!$doc->load(test.xml))  
 {  
      foreach (libxml_get_errors() as $error) 
      {
          print_r($error);
      }
        libxml_clear_errors();
 }
 else
 {
     $valid_xml = 'y';      
 }

 if($valid_xml=='y')
 // then process XML
 else
 // skip and take next file

但是如果(!$ doc-&gt; load(test.xml))

,我会在行下面出现错误
Message: DOMDocument::load(): Couldn't find end of Start Tag AdjustmentsToReconcile

Message: DOMDocument::load(): Premature end of data in tag

2 个答案:

答案 0 :(得分:2)

你快到了。尝试添加命令libxml_use_internal_errors(true);之前告诉PHP不要抛出错误,而是缓存它们,让你在代码执行时进行迭代。

答案 1 :(得分:1)

这应该对你有帮助:

libxml_use_internal_errors(true);
$doc = new DOMDocument();

$valid_xml = true;
if(!$doc->load(test.xml))
{  
    $valid_xml = (count(libxml_get_errors()) === 0);
    libxml_clear_errors();
}

if($valid_xml)
// then process XML
else
// skip and take next file

libxml_use_internal_errors是关键。