如何检查 simpleXML 是否为空

how to check if simpleXML is null

所以,我构建了一个包含 multi curl 的脚本来验证 XML 并从更多 url 中提取 $xml->loc 但是当他发现其他任何东西时我的脚本崩溃(停止)不是 xml 文件

...multi curl code...
    if($httpcode>=200 && $httpcode<=300) {
        $xml = new SimpleXMLElement($data);
        if($xml !== NULL) {
            foreach ($xml->url as $url_list) {
            $url = $url_list->loc;
            $newurls[] = $url;
            }
        }
    }

如果我输入 5 个有效的 xml 网址,它会起作用,但如果我输入 100 个 link 而其中一个不是 XML 文件,脚本将停止。

错误:

[root@test ~]# php a z2
PHP Fatal error:  Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /root/a:160
Stack trace:
#0 /root/a(160): SimpleXMLElement->__construct('\r\n<!DOCTYPE htm...')
#1 /root/a(65): mycurl_done('http://southpas...', '\r\n<!DOCTYPE htm...', Resource id #36)
#2 /root/a(175): ThreadsLoop()
#3 {main}
  thrown in /root/a on line 160
[root@test ~]#

我的脚本似乎试图从 html 文件中提取信息,因为如果该文件不存在,它会将我重定向到主页(我猜)... 如果 SimpleHTMLElement 无法解析我的 $data 变量(即来自 XML 文件的完整源代码),我必须做出哪些选择才能继续?

您可以使用 try catch 块来处理异常。

try {
  $xml = new SimpleXMLElement($data);
  //XML is valid
  ...
} catch(Exception $e) {
  //XML is invalid
}