跳过xml“过早结束数据”;错误


Skip xml "premature end of data" error

我有一个错误的xml提要。它切断了一些节点,它们被破坏了,我得到以下错误消息-

Warning: DOMDocument::load() [function.DOMDocument-load]: Premature end of data in tag 
hotelDescription line 30760 in /srv/disk9/561574/www/source.xml, line: 30760 in /srv/disk9/561574/www/file.php on line 22
Warning: DOMDocument::load() [function.DOMDocument-load]: Premature end of data in tag product line 30741 in /srv/disk9/561574/www/source.xml, line: 30760 in /srv/disk9/561574/www/file.php on line 22
Warning: DOMDocument::load() [function.DOMDocument-load]: Premature end of data in tag products line 2 in /srv/disk9/561574/www/source.xml, line: 30760 in /srv/disk9/561574/www/file.php on line 22
0

我已经设置了一个错误处理程序,但我不确定如何,或者如果它甚至是可能的,忽略一个元素,如果它导致错误?

/* load the file on the DOM*/
$dom = new DomDocument();
$dom->load($filename);
if (!$dom->load($filename)) {
    foreach (libxml_get_errors() as $error) {
        // handle errors here
    }
    libxml_clear_errors();
}

任何帮助都非常感谢。

经过大量研究发现,似乎不可能跳过破碎的元素。

https://stackoverflow.com/a/13609656/1122187

在我的情况下,提要在末尾中断,所以我使用XMLreader只截取一定数量的内容,使用限制,这样它就不会到达最后中断的元素。

while ($reader->read()) 
{
    if (($reader->name == $element1  || $reader->name == $element2) && $reader->nodeType == XMLReader::ELEMENT)
    {
    $name = $reader->name;
        if ($i == $limit) break;
        while ($reader->read())
        {
            if ($reader->nodeType == XMLReader::TEXT
                || $reader->nodeType == XMLReader::CDATA
                || $reader->nodeType == XMLReader::WHITESPACE
                || $reader->nodeType == XMLReader::SIGNIFICANT_WHITESPACE)
            {
                $product[$i][$name] = $reader->value;
            }
            else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == $element1)
            {
                break;
            }
            else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == $element2)
            {
                break;
            }

         }
         if($name == $element2)
    $i++;
    }
}
$reader->close();
上面的

代码归功于Jose Vega从这个链接- PHP xmlreader到数组