【问题标题】:Fatal error: Call to undefined method DOMDocument::getElementsById()致命错误:调用未定义的方法 DOMDocument::getElementsById()
【发布时间】:2014-07-20 15:57:12
【问题描述】:

我正在解析一个外部 html (http://www.amazon.com/Toshiba-Satellite-C55-A5245-15-6-Inch-Horizon/dp/B00D78PZE8/ref=lp_9277875011_1_1?s=pc&ie=UTF8&qid=1400886357&sr=1-1),其中有一个像这样的元素:

<span id="priceblock_ourprice" class="a-size-medium a-color-price">$429.99</span>

和一个带有以下代码的php:

$dom = new DOMDocument;

libxml_use_internal_errors(TRUE);
$dom->loadHTMLFile($url);
libxml_clear_errors();

$links = $dom->getElementsById('priceblock_ourprice');

foreach ($links as $link ) {
    echo "- ".$link->nodeValue."<br>";
}

但我收到以下错误:

Fatal error: Call to undefined method DOMDocument::getElementsById() 

谁能告诉我我做错了什么?

谢谢!

【问题讨论】:

  • 不是getElementById吗?
  • 你是对的! jajajaj 抱歉,虽然现在我得到:警告:foreach() 提供的参数无效知道可能是什么吗?
  • 但是,我应该把html标签改成一个类吗?因为我无法改变它。我应该删除 foreach 并只做 echo 吗?
  • 您不能更改 HTML 并且它包含多个具有相同 id 的元素?

标签: php domdocument


【解决方案1】:

getElementsById() 不是DOMDocument 的方法,你应该试试getElementById()。我什至不认为两个元素可以具有相同的 id,因此您将无法获得基于 id 的集合(数组)。

【讨论】:

  • 供参考:DOMDocument::getElementById 还有,ElementId 必须是唯一的。否则文档无效。
  • 你是对的!谢谢,现在我做了一个独特的回声,虽然现在我得到了:注意:尝试获取非对象的属性并且我没有收到任何值:P
  • @showdev 更改为 innerHTML 显示相同,还有其他想法吗?
  • @Trifit 抱歉,我没有注意到您正在使用 DOMDocument。我在想javascript。
【解决方案2】:

好的,所以我不太明白,似乎Firefox中的Firebug向我显示了错误的ID,我使用以下代码获取不同跨度的ID,正确的是:

$dom = new DOMDocument();

libxml_use_internal_errors(TRUE);
$dom->loadHTMLFile($url);
libxml_clear_errors();

$nodes = $dom->getElementsByTagName('span');

foreach($nodes as $node) {
echo $node->getAttribute('id'). '->'.$node->textContent.'<br>';
}

它为我正在寻找的字段返回了一个不同的 id,我想我在某些时候遇到了一些错误,真的很抱歉浪费了你的时间。

【讨论】:

    猜你喜欢
    • 2015-01-28
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2012-01-06
    • 2012-07-24
    相关资源
    最近更新 更多