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基于libxmllibxml提供各种功能,甚至是用于错误处理的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 回答
0

我遇到了同样的问题。问题是您的 XML 无效。您不应该在 XML 中有特殊字符(即 & 应该在 XML 文件生成期间转换为 &)。

有关更多信息,您可以看到这个类似的问题。

你基本上有两个选择:

  1. 您可以在解析之前修复文件(例如使用正则表达式)
  2. 您可以首先修复生成 XML 的代码
于 2013-11-20T14:29:15.363 回答
-2

Use XMLReader::isValid().

<?php $xml = XMLReader->open('file.xml');

// You have to use this:
$xml->setParserProperty(XMLReader::VALIDATE, true);

var_dump($xml->isValid());
?>
于 2013-06-08T10:32:04.083 回答