2015-12-15 123 views
0

我已经收到错误消息下面的一段代码(我试图让一个特定网页上的“文章”标签中的内容):试图获取非对象的属性?

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获得就行了非对象的属性;我在这里错过了什么?

+2

运行'var_dump($ html-> getElementsbyTagName('article') - > item(0));'你会看到它不是一个对象。可能会给你一个分解线索,你可以继续从那里分解。 – Devon

+0

@JackSmith:这有些不同 - 链接问题中的问题是,该值不是一个对象,而是一个数组,而问题* here *是该值为* null *。当然,这两个都不是对象,但我怀疑这个问题的答案对于OP来说特别有用。 –

回答

1

你在你的代码的两个问题:

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

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

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

相关问题