我正试图抓住一个试图获取非对象通知的属性,当我的$xpath->evaluate
找不到匹配的对象时发生该属性。
这是我的代码
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$sources = $xpath->evaluate("//img/@src"); # "/images/image.jpg"
$src = $sources[0]->value;
echo $src;
我已经尝试将$sources = $xpath->evaluate("//img/@src");
置于try和catch语句中,但由于它不是异常错误,因此无效。
我也尝试过使用
if ($sources) {
$src = $sources[0]->value;
echo $src;
}
这也不起作用。
你知道我能做些什么来引起注意吗?
答案 0 :(得分:1)
您可以检查是否返回了某些内容以及返回的节点数...
if ($sources !== false && $sources->length > 0) {
$src = $sources[0]->value;
echo $src;
}
evaluate()
可能会返回一个DOMNodeList,因此上面的代码会检查length
。
答案 1 :(得分:0)
您必须使用结果的length
属性,其中包含计数。
if ($sources->length > 0) {
$src = $sources[0]->value;
echo $src;
}
除此之外:您只能捕获异常。警告和错误不是例外。如果要捕获它们,则必须注册自己的错误处理程序,然后抛出异常。在你的情况下,这也是可能的,但它总是更好的解决方案,以完全避免这种错误。