1

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();
}

どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1

0

多くの研究の結果、これは壊れた要素をスキップすることはできないようです。

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();

上記のコードは、このリンクからのJoseVegaの功績です-PHPxmlreaderからarray

于 2013-01-09T01:44:30.117 に答える