好的,所以我使用http://simplehtmldom.sourceforge.net/上找到的基于php的simple_html_dom.php来抓取网页,而我想要做的是生成一个反映页面html元素结构的嵌套列表。最终我计划使用该列表初始化jsTree,但我无法通过第一步。我知道有一个简单的直接解决方案,但我似乎无法弄明白。我花了几个小时在网上搜索,最后在这里发帖。
基本上我想转换它:
<body>
<div id='div0'>
<span id='span0'> <img id='img1'> </span>
</div>
<div id='div1'>
<span id='span1'> </span>
</div>
</body>
进入这个:
<ul>
<li>
div0
<ul>
<li>
span0
<ul>
<li>
img1
</li>
</ul>
</li>
</ul>
</li>
<li>
div1
<ul>
<li>
span1
</li>
</ul>
</li>
</ul>
我认为正确的一个例子就是这样,但它会产生:`
<li><li>`Fatal error: Call to a member function children() on a non-object in main.php on line 46
代码:
include_once('simple_html_dom.php');
$html = file_get_html("http://www.thefuckingweather.com/");
function create($url)
{
print "<li>";
$count = 0;
foreach ($url as $chi)
{
if($chi->tag != "script")
{
if (count($chi->children()) > 0) //#46
{
create($chi->children($count));
}
else
{
print "</li>";
}
}
$count++;
}
}
create($html->find("body"));
答案 0 :(得分:0)
想出来。我发誓,也许发生这种情况是因为我太累了。答案非常简单。
include_once('simple_html_dom.php');
$html = file_get_html("http://www.reddit.com/");
foreach ($html->find("body") as $chi)
{
test($chi);
}
$count = 0;
function test($t)
{
print "<ul>";
for ($i = 0; $i < count($t->children()); $i++)
{
print "<li>";
print $t->children($i)->id . " - " . $t->children($i)->tag . $count++;
test($t->children($i));
print "</li>";
}
print "</ul>";
}