要阅读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文件。有人可能知道如何解决这个错误吗?
答案 0 :(得分:2)
有许多不同的方法可以处理您遇到的错误情况。但首先,我认为您应该知道XMLReader
基于libxml
和libxml
offers various functions,甚至基于LibXMLError
object进行错误处理:
$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中使用名为 internal errors 的东西。
参见:
答案 1 :(得分:0)
我遇到了同样的问题。问题是您的XML无效。你不应该在XML中有特殊的字符(即&amp;应该在XML文件生成期间转换为&amp;)。
有关详细信息,您可以看到this类似的问题。
您基本上有两个选择:
答案 2 :(得分:-2)
<?php $xml = XMLReader->open('file.xml');
// You have to use this:
$xml->setParserProperty(XMLReader::VALIDATE, true);
var_dump($xml->isValid());
?>