PHP DOMNode: как извлекать не только текст, но и HTML-теги

#php #dom #screen-scraping

#php #dom #очистка экрана

Вопрос:

Я пытаюсь создать скрипт, который очищает веб-сайт для получения последних обновлений новостей. К сожалению, я столкнулся с небольшой проблемой, которую, похоже, не могу исправить с моими ограниченными знаниями о DOM.

Страница, которую я пытаюсь очистить, построена следующим образом :

 <table>
<tr class="color1">
<td>Author</td>
<td>Content <a href="#">in HTML</a></td>
<td>Date</td>
</tr>
</table>
  

Я могу отлично извлекать нужные мне поля, за исключением содержимого. С помощью $td-> nodeValue я извлекаю содержимое в текстовой форме, тогда как я хочу, чтобы оно было в HTML (там есть теги ‘a’, ‘blockquote’ и т.д.)

Вот код, который у меня есть :

 try {
    $html = @ file_get_contents("test.php");
    checkIfFileExists($html);

    $dom = new DOMDocument();
    @ $dom->loadHTML($html);

    $trNodes = $dom->getElementsByTagName("tr");
    foreach ($trNodes as $tr) {

        if ($tr->getAttribute("class") == "color1" || $tr->getAttribute("class") == "color2") {

        $tdNodes = $tr->childNodes;
        foreach ($tdNodes as $td) {

            echo $td->nodeValue . "<br />n";

        }
        echo "<br /><br /><br /><br /><br />n";
    }
} catch(Exception $e) {
    echo $e->getMessage();
}
  

Я бы предпочел не прибегать к какой-либо сторонней библиотеке, но, очевидно, любой ответ наиболее ценен, библиотека это или нет.

Заранее спасибо.

Ответ №1:

заменить

 echo $td->nodeValue . "<br />n";
  

с помощью

 echo $dom->saveXML($td)  . "<br />n";