我收到了以下代码的错误消息(我试图将内容放在特定网页上的文章标签内):
Events.where(id: [1, 2, 3]).all
它说我试图通过
获取非对象的属性function getTextFromLink($url) {
$html = new DOMDocument();
$html->loadHTML($url);
$text = $html->getElementsByTagName('article')->item(0)->textContent;
return $text;
}
我对php和DOM相当新;我在这里错过了什么?
答案 0 :(得分:2)
您的代码中存在两个问题:
明显的问题是$html->getElementsByTagName('article')->item(0)
不是对象。具体来说,它是null,因为您正在解析的HTML实际上不包含任何article
元素。您可以通过关注Devon's advice并使用$html->getElementsByTagName('article')->item(0)
查看var_dump()
的值来自行了解这一点。
现在,为什么您的HTML不包含任何article
元素?好吧,真正的问题结果是loadHTML()
方法将从字符串加载HTML 并解析它。也就是说,当您调用$html->loadHTML($url);
时,PHP会将字符串变量$url
的内容解析为HTML代码,并为您提供表示结果的DOMDocument。鉴于您将变量命名为$url
,我非常确定不是您想要的。
您实际想要使用的内容可能是loadHTMLFile()
,它实际上是从命名文件(或显然是URL)加载HTML代码,而不是从PHP字符串加载。