从simple_html_dom.php </li>创建嵌套的<li>结构

时间:2011-03-27 19:15:46

标签: php jstree nested-loops simple-html-dom

好的,所以我使用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"));

1 个答案:

答案 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>";
}