Я хотел бы использовать Simple HTML DOM для удаления всех изображений в статье, поэтому я могу легко создать небольшой фрагмент текста для тикета новостей, но я не понял, как удалить элементы с ним.
В основном я бы сделал
Любая помощь?
Для удаления элементов не существует специальных методов. Вы просто находите все элементы img, а затем выполняете
$e->outertext = '';
когда вы удаляете только внешний текст, вы удаляете сам HTML-контент, но если вы выполните другое обнаружение на тех же элементах, оно появится в результате. причина в том, что простой объект HTML DOM по-прежнему имеет внутреннюю структуру элемента, только без его фактического содержимого. что вам нужно сделать, чтобы действительно удалить элемент, просто перезагрузите HTML как строку в одну и ту же переменную. таким образом, объект будет воссоздан без удаленного контента, а простой объект HTML DOM будет создан без него.
вот примерная функция:
public function removeNode($selector) { foreach ($this->find($selector) as $node) { $node->outertext = ''; } $this->load($this->save()); }
поместите эту функцию в класс simple_html_dom, и вы хороши.
Я думаю, что у вас есть некоторые трудности, потому что вы забыли сохранить (сбросить внутреннее дерево DOM обратно в строку).
Попробуй это:
$html = file_get_html("http://example.com"); foreach($html ->find('img') as $item) { $item->outertext = ''; } $html->save(); echo $html;
Я не мог понять, куда поместить функцию, поэтому я просто поставлю следующее прямо в свой код:
$html->load($html->save());
Он в основном блокирует изменения, сделанные в цикле for, обратно в html в соответствии с выше.
Предполагаемые решения довольно дороги и практически непригодны для использования в большой петле или другом повторении.
Я предпочитаю использовать «мягкие удаления»:
foreach($html->find('somecondition'),$item){ if (somecheck) $item->setAttribute('softDelete', true); //<= set marker to check in further code $item->outertext=''; foreach($foo as $bar){ if(!baz->getAttribute('softDelete'){ //do something } } }
Это работает на меня:
foreach($html->find('element') as $element){ $element = NULL; }