请注意,“if (! $sxe) {" 如果 XML 文档为空(例如“<root />”),则可能会给您一个假阴性。在这种情况下,$sxe 将是
object(SimpleXMLElement)#1 (0) {
}
这将评估为 false,即使在技术上没有任何错误。
改为考虑:“if ($sxe === false) {"
在加载文档时处理 XML 错误是一项非常简单的任务。使用 libxml 功能,可以在加载文档时抑制所有 XML 错误,然后遍历这些错误。
由 libxml_get_errors() 返回的 libXMLError 对象包含多个属性,包括错误的 message、line 和 column(位置)。
示例 #1 加载损坏的 XML 字符串
<?php
libxml_use_internal_errors(true);
$sxe = simplexml_load_string("<?xml version='1.0'><broken><xml></broken>");
if ($sxe === false) {
echo "Failed loading XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
?>
以上示例将输出
Failed loading XML Blank needed here parsing XML declaration: '?>' expected Opening and ending tag mismatch: xml line 1 and broken Premature end of data in tag broken line 1
请注意,“if (! $sxe) {" 如果 XML 文档为空(例如“<root />”),则可能会给您一个假阴性。在这种情况下,$sxe 将是
object(SimpleXMLElement)#1 (0) {
}
这将评估为 false,即使在技术上没有任何错误。
改为考虑:“if ($sxe === false) {"
如果您需要处理损坏的 XML 文档的内容,您可能会发现这很有趣。它已经帮我绕过了几个简单的损坏。
https://php.net/manual/en/class.domdocument.php#domdocument.props.recover