我有一个像这样结束的卷曲脚本:
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$ data字符串它是一个带有表的HTML页面,我想要删除它以便我可以将数据存储到MYSQL数据库中,我尝试使用带有以下命令的DOM:
// new dom object
$dom = new DOMDocument();
//load the html
$html = str_get_html($returned_content2);
$dom->strictErrorChecking = false;
//discard white space
$dom->preserveWhiteSpace = false;
//the table by its tag name
$tables = $dom->getElementsByTagName('table');
//get all rows from the table
$rows = $tables->item(0)->getElementsByTagName('tr');
// loop over the table rows
foreach ($rows as $row)
{
// get each column by tag name
$cols = $row->getElementsByTagName('td');
// echo the values
echo $cols->item(0)->nodeValue.'<br />';
echo $cols->item(1)->nodeValue.'<br />';
echo $cols->item(2)->nodeValue;
}
}
但不断收到错误:
致命错误:在第178行的/home/sdsd/dfdsfsdfds/sdfsdfs/table.php中的非对象上调用成员函数getElementsByTagName()
答案 0 :(得分:4)
您根本没有将HTML加载到DOMDocument
中。删除此行
$ html = str_get_html($ returned_content2);
并将其放在preserveWhiteSpace
行
$dom->loadHTML($returned_content2);
在尝试获取表格行之前,您应确保至少找到一个表格,例如
$tables = $dom->getElementsByTagName('table');
if ($tables->length == 0) {
throw new Exception('No tables found');
}
答案 1 :(得分:1)
这是相当微不足道的:
//get all rows from the table
$rows = $tables->item(0)->getElementsByTagName('tr');
^^^^^^^
当文档没有表格(例如,因为您没有加载任何内容时为空文档)时,->item(0)
会返回NULL
。值NULL
没有getElementsByTagName
方法(它甚至不是对象),因此您会看到错误消息。
每当您执行重要操作(或遇到错误)时,请执行所需的前置条件检查。 E.g:
$tables = $dom->getElementsByTagName('table');
if (!$tables->length) {
throw new UnexpectedValueException('Table expected but not found.');
}