试图在PHP中捕获$ xpath->评估

时间:2018-05-17 19:31:56

标签: php html regex dom try-catch

我正试图抓住一个试图获取非对象通知的属性,当我的$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;
}

这也不起作用。

你知道我能做些什么来引起注意吗?

2 个答案:

答案 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;
}

除此之外:您只能捕获异常。警告和错误不是例外。如果要捕获它们,则必须注册自己的错误处理程序,然后抛出异常。在你的情况下,这也是可能的,但它总是更好的解决方案,以完全避免这种错误。