我有一个错误的xml Feed。它切断了一些节点,它们坏了,我得到以下错误消息 -
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();
}
非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
经过大量研究发现,这似乎不可能跳过破碎的元素。
https://stackoverflow.com/a/13609656/1122187
在我的情况下,Feed最后会中断,因此我使用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 to array