试图获得非对象的属性?

时间:2015-12-15 00:57:14

标签: php html dom domdocument

我收到了以下代码的错误消息(我试图将内容放在特定网页上的文章标签内):

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相当新;我在这里错过了什么?

1 个答案:

答案 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字符串加载。