我有一个带开关的程序:
$htmlContent = file_get_contents('http://somesite.com');
$htmlDOM->loadHTML( $htmlContent );
$htmlXPath = new DOMXPath( $htmlDOM );
for($i = 0; $i <= 16; $i++ ) {
switch($i) {
case 0:
$link = utf8_decode($htmlXPath->query('/html/body/div[2]/div[2]/div/div/div/div/div[2]/div/a')->item(0)->getAttribute('href'));
break;
case 1:
$link = utf8_decode($htmlXPath->query('/html/body/div[2]/div[2]/div/div/div/div/ul/li/div/a')->item(0)->getAttribute('href'));
break;
default:
$link = utf8_decode($htmlXPath->query('/html/body/div[2]/div[2]/div/div/div/div/ul/li[' . $i . ']/div/a')->item(0)->getAttribute('href'));
break;
}
}
对于情况0和情况1,工作方式与预期相同,但默认情况下抛出此错误:
PHP Fatal error: Call to a member function getAttribute() on a non-object
我可以想象它是因为$I而发生的,但我该如何解决这个问题?
谢谢你的帮助!
很可能查询找不到任何内容,并返回零长度的节点列表。尝试从空列表中获取节点返回false,而不是对象。
与其假设查询成功,不如使用中间持有者进行检查:
$nodes = $htmlXPath->query('/html/body/div[2]/div[2]/div/div/div/div/div[2]/div/a');
if ($nodes->length > 0) {
$link = $nodes->item(0)->getAttribute('href'));
}