Задать вопрос
@Mikhail555

DOMDocument php, как получить содержимое блока, с html тегами?

Вообщем необходимо получить со страницы примерно такого содержания:
<body>
<div id="firstElement">
         <div class="childrenFirstElement">
                 <img src="/test.jpg" />
         </div>
         <div class="childrenFirstElement">
                <img src="/test.jpg" />
         </div>
         <div class="childrenFirstElement">
               <img src="/test.jpg" />
         </div>
         <div class="childrenFirstElement">
               <img src="/test.jpg" />
         </div>
         <div class="childrenFirstElement">
               <img src="/test.jpg" />
         </div>
         <div class="childrenFirstElement">
               <img src="/test.jpg" />
         </div>
</div>
</body>

а именно необходимо получить содержимое блока с идентификатором "firstElement", вместе с HTML тегами. Я использую DOMDocument, но получается вывести только текст.

Подскажите пожалуйста, как правильно получить содержимое?

P.S. вложенных блоков может быть сколько угодно много! и у всех может быть разное содержание!
  • Вопрос задан
  • 9798 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Mikhail555 Автор вопроса
После публикации вопроса, прошло время и вот что я добился!
Перекурил документацию по php, и сделал вот так:
$file = file_get_contents('../test.html');
libxml_use_internal_errors(TRUE);
$node = new DOMDocument();
$text = $node->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . $file);
$id = $node->getElementById('firstElement');
$html = $node->saveHTML($id);


Тут я добился, что переменная $html - представляет собой 'string' со всем содержимым тут все понятно.

Но дальше необходимо вставить $html в другой документ в блок с известным идентификатором, рабочее решение будет с использованием регулярки (написана прям тут) таким:
$file = file_get_contents('./какой-тоФайл.html');
preg_replace('/(\<[\s\S]*?myId[\s\S]*?\>)/', '\\1 $html', $file);


А вот используя DOMDocument и все такое, я не могу вставить узел, не могу понять (или еще не дочитал) как! Причем пытаюсь использовать DOMNode::appendChild и передаю ей $id из кода выше, но не работает!
Ответ написан
Комментировать
deleted-tnorman
@deleted-tnorman
Вот чудо методы для работы с дом-моделью в PHP.
Я не сильно понял вопрос, но благодаря всякой фигне, которая тут написана, мне удалось управлять DOM моделью в PHP.

Вам надо обратить внимание на всякие такие штуки как DOMElement. Потому, что получив DOMDocument веселье не кончается. Теперь вам надо наладить работу с его "Документа" элементами. А значит не помешает так же распочковать структуру всех искомых элементов.
Это можно делать с помощью методов работы с ДОМЕлементами. Такими методами как

public DOMNodeList getElementsByTagName ( string $name )

Но я советую более детально ознакомиться с возможностями работы с ДОМЕлементами, чтоб не вышло путаницы. Найти там то, что вам надо и решить свою задачу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы