【问题标题】:Trying to get property of non-object? [duplicate]试图获得非对象的属性? [复制]
【发布时间】:2016-03-20 15:47:48
【问题描述】:

我收到以下代码的错误消息(我正在尝试获取某个网页上“文章”标签内的内容):

function getTextFromLink($url) {
    $html = new DOMDocument();
    $html->loadHTML($url);
    $text = $html->getElementsByTagName('article')->item(0)->textContent;
    return $text;
}

它说我正在尝试获取非对象的属性

$text = $html->getElementsbyTagName('article')->item(0)->textContent;

我对 php 和 DOM 还很陌生;我在这里错过了什么?

【问题讨论】:

  • 运行var_dump($html->getElementsbyTagName('article')->item(0));,你会发现它不是一个对象。可能会给你一个分解它的线索,你可以从那里继续分解它。
  • @JackSmith:这略有不同——您的链接问题中的问题是该值不是对象而是数组,而 here 的问题是该值是。当然,两者都不是对象,但我怀疑该问题的答案对 OP 特别有用。

标签: php html dom domdocument


【解决方案1】:

您的代码中有两个问题:

明显的问题是$html->getElementsByTagName('article')->item(0) 不是一个对象。具体来说,它为 null,因为您正在解析的 HTML 实际上不包含任何 article 元素。您可以通过关注Devon's advice 并使用var_dump() 查看$html->getElementsByTagName('article')->item(0) 的值来自己解决这个问题。

现在,为什么您的 HTML 不包含任何 article 元素?嗯,真正的 问题原来是loadHTML() 方法将从字符串 加载HTML 并解析它。也就是说,当你调用$html->loadHTML($url);时,PHP会将字符串变量$url的内容解析为HTML代码,并给你一个代表结果的DOMDocument。鉴于您将变量命名为 $url,我很确定这不是您想要的。

您实际上想要使用的可能是loadHTMLFile(),它实际上是从命名文件(或者显然是 URL)而不是从 PHP 字符串加载 HTML 代码。

【讨论】:

    猜你喜欢
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多