我有
foreach($users as $user){
$doc = new DOMDocument();
$doc->loadXml(file_get_contents($user["syncUrl"]));
}
如果$ user [“syncUrl”]上的url中的内容,那么loadXml()返回错误(如果它无法读取),我希望它继续;并且不要在循环中读取其余部分,直到下一个循环(下一个$ user)。
现在它正在崩溃,并输出由于格式错误而无法读取的内容。但我希望它跳过这个并继续其余的。
我该怎么做?
答案 0 :(得分:1)
呵呵,你在问题中有它:continue;
是跳过循环的其余部分并开始下一次迭代的命令。对$ doc-> loadXML进行错误检查,如果未成功加载,则continue;
。
所以:
foreach($users as $user)
{
$doc = new DOMDocument();
$loaded = $doc->loadXml(file_get_contents($user["syncUrl"])); //Should return false on failure, true on success
if($loaded === false)
{
continue;
}
//Do other stuff here if successfully loaded.
}
使用DOMDocument::validate()
验证格式(来自DTD)和continue
如果无效,也可能是明智之举。您还可以使用DOMDocument::schemaValidateSource()
提供源架构,并使用DOMDocument::schemaValidate()
验证该架构的格式。您也可以这样做以在加载时验证它:
$doc = new DOMDocument();
$doc->validateOnParse = true;
$doc->loadXML('etc');
如果文件内容实际存在,那么加载函数返回false可能是必要的。
答案 1 :(得分:0)
尝试在@
来电前加$doc->loadXml
,看看是否有效。
答案 2 :(得分:0)
使用错误抑制运算符@
:
foreach($users as $user) {
$doc = new DOMDocument();
@$doc->loadXml(file_get_contents($user["syncUrl"]));
}
答案 3 :(得分:0)
使用try和catch块?
foreach($users as $user){
try{
$doc = new DOMDocument();
$doc->loadXml(file_get_contents($user["syncUrl"]));
}
catch(Exception $e){
continue;
}
//Rest of the code..
}