PHP中的简单HTML DOM解析器问题()

时间:2009-12-10 22:05:26

标签: php html dom parsing split

我想使用PHP Simple HTML DOM Parser在我的网站上显示我所有的Left4Dead Steam成就。蒸汽社区网站上的成就列表如下所示:

<img src="…" /><br />
<div class="achieveImgHolder"><img src="…" /></div>
<div class="achieveTxtHolder">
 <img src="…" />
 <div class="achieveTxt">
  <h3>Stand Tall</h3>
  <h5>Survive a campaign without being incapacitated.</h5>
 </div>
</div>
<br clear="left" />

通过

将活动成就与非活动成就分开
<br /><br /><br />

所以我写了这段代码来展示我的成就:

<?php
include("simple-html-dom-parser.php");
$achievementPage = file_get_html("http://steamcommunity.com/id/snorpey/stats/L4D?tab=achievements");
$activeInactiveSplit = split("<br /><br /><br />", $achievementPage);
$actives = str_get_html($activeInactiveSplit[0]);
$inactives = str_get_html($activeInactiveSplit[1]);

foreach($actives->find(".achieveTxtHolder") as $achievement)
{
 echo $achievement->find(".achieveTxt h3", 0)->innertext;
}
?>

我总是收到以下错误,不知道从哪里来。

  

致命错误:在第8行的testing.php中调用非对象的成员函数find()

我使用页面的另一部分测试了解析器并且它正常工作。分割页面似乎有问题。

echo $actives // works w/out errors

这到底出了什么问题?

1 个答案:

答案 0 :(得分:3)

更改...

$actives->find(".achieveTxtHolder", 0)

为...

$actives->find(".achieveTxtHolder")

指定0仅返回第一个匹配项而不是可迭代的出现列表;因为你正在使用foreach,所以你想要所有的事件。否则foreach会尝试迭代不是列表的内容,因此您的$achievement变量实际上是NULL,因此当您尝试在其上调用->find()时会出现错误。< / p>