создание вложенной <li>структуры из simple_html_dom.php - PullRequest
0 голосов
/ 27 марта 2011

Хорошо, поэтому я использую php-файл simple_html_dom.php, найденный по адресу http://simplehtmldom.sourceforge.net/, для очистки веб-страниц, и я хотел бы создать вложенный список, отражающий структуру 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 голосов
/ 28 марта 2011

Разобрался. Клянусь, возможно, это произошло потому, что я так чертовски истощен. Ответ был очень прост.

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>";
}
...