0

XML ファイルを読み取るには、次を使用します。

$XMLFile = new XMLReader();

if($XMLFile->open('file.xml') === TRUE){                            

    while($XMLFile->read()) {

        //Do something

    }

    $XMLFile->close();

}

xml ファイルのサンプル文字列で見つかった場合:

!+_)(*&^%$#@!~}|"?,../;'\[]=-

重大なエラーが表示され、解析が終了します。

Warning: XMLReader::read() [xmlreader.read]: file.xml:16: parser error : xmlParseEntityRef: no name in test.php on line 841
Warning: XMLReader::read() [xmlreader.read]: An Error Occured while reading in test.php on line 841

この場合、エラーを処理して xml ファイルを削除したいと思います。誰かがこのエラーを修正する方法を知っているかもしれません?

4

3 に答える 3

2

そこにあるエラー状態に対処するには、さまざまな方法があります。しかし、まず第一に、それがさまざまな機能XMLReaderに基づいてlibxmlおりlibxml、さまざまな機能とエラー処理のLibXMLErrorオブジェクトを提供していることを知っておく必要があると思います。

$reader = new XMLReader();
if (!$reader->open($file)) {
    throw new RuntimeException('Unable to open file.');
}

while ($reader->read()) {
    //Do something
}

if (libxml_get_last_error()) {
    // There was an error reading the file
    unlink($file);
}

エラー情報の例は次のとおりです。

LibXMLError Object
(
    [level] => 3
    [code] => 68
    [column] => 12
    [message] => xmlParseEntityRef: no name

    [file] => /path/to/file.xml
    [line] => 2
)

この例の XML ファイルの場合:

<root>
    !+_)(*&^%$#@!~}|"?,../;'\[]=-
</root>

エラー出力を減らしたい場合は、libxmlの内部エラーと呼ばれるものを利用できます。

同様に参照してください:

于 2013-06-08T18:30:00.187 に答える