试图在 php 中捕获 $xpath->evaluate
Posted
技术标签:
【中文标题】试图在 php 中捕获 $xpath->evaluate【英文标题】:Trying to catch $xpath->evaluate in php 【发布时间】:2018-10-28 04:23:03 【问题描述】:我正在尝试捕捉当我的 $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 and catch 语句中,但由于它不是异常错误,所以它不起作用。
我也尝试过使用
if ($sources)
$src = $sources[0]->value;
echo $src;
这也没有用。
你知道我可以做什么来收到通知吗?
【问题讨论】:
php - How to catch a 'Trying to get property of non-object' error的可能重复 @ficuscr 我已经尝试过这篇文章中的解决方案,但没有奏效。 嗨,“没用”?不知道你的意思是什么。我分享的答案我认为很清楚。你无法捕捉到错误。你只能捕获一个异常。 @ficuscr 我的意思是你分享的答案并没有解决我的问题。 ^^ 【参考方案1】:您可以检查是否返回了某些内容以及返回的节点数...
if ($sources !== false && $sources->length > 0)
$src = $sources[0]->value;
echo $src;
evaluate()
可能会返回一个DOMNodeList,所以上面的代码检查length
。
【讨论】:
我确实得到了未定义的属性:DOMNodeList::$countReturns a typed result if possible or a DOMNodeList containing all nodes...
,仅在错误时为 false。检查!== false
是否理想?我会更明确。
我确实需要添加一个自己的 count() 函数对吗?因为我得到未捕获的错误:调用未定义的方法 DOMNodeList::count()
尝试使用length
(来自php.net/manual/en/class.domnodelist.php)的替代方法
@ficuscr,如果你做了类似evaluate("count(//img/@src)")
他们没有做的事情,evaluate 只返回一个类型化的结果,false 只返回'如果表达式格式错误或 contextnode 无效'。
【参考方案2】:
您必须使用结果的length
属性,其中包含计数。
if ($sources->length > 0)
$src = $sources[0]->value;
echo $src;
除此之外:您只能捕获异常。警告和错误也不例外。如果要捕获它们,则必须注册自己的错误处理程序,然后引发异常。在您的情况下,这也是可能的,但它始终是完全避免此类错误的更好解决方案。
【讨论】:
以上是关于试图在 php 中捕获 $xpath->evaluate的主要内容,如果未能解决你的问题,请参考以下文章
在有效的 PHP query() XPath 中转换 Javascript XPath |规范化 JS XPath --> PHP