разобрать HTML и удалить текст, сохраняя теги

Простой PHP-домен позволяет нам взять HTML-страницу и извлечь только разметку, оставив текст. Как это:

echo file_get_html('http://www.google.com/')->plaintext;

Я ищу напротив этого метода. Удалите весь текст и сохраните только теги. Это существует? Я не могу найти какую-либо ссылку.

1

Решение

В реальном API-интерфейсе W3C DOM (не SimpleHtmlDom) все является узлом, а не только узлами элемента. С XPath вы можете выбрать их, используя text() функция.

$html = <<<'HTML'
<html><body>
<div>
TEXT<div>TEXT</div>
</div>
</body></html>
HTML;

$document = new DOMDocument();
$document->loadHTML($html);
$xpath = new DOMXpath($document);

foreach ($xpath->evaluate('//text()') as $node) {
$node->parentNode->removeChild($node);
}

echo $document->saveHtml($document->documentElement);

Выход:

<html><body><div><div></div></div></body></html>
1

Другие решения

Не используйте поиск и заменить функцию PHP или регулярное выражение. Они предназначены для разбора и уменьшения строк и больших текстов. Используйте что-нибудь в строке HTML DOM для разбора.

http://simplehtmldom.sourceforge.net/manual.htm

Например, чтобы найти все теги img в HTML-документе, вы должны сделать следующее:

// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images
foreach($html->find('img') as $element)
echo $element->src . '<br>';

// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';

перейдя по указанному ниже URL-адресу, вы узнаете, как найти HTML-элементы на загруженной HTML-странице.

http://simplehtmldom.sourceforge.net/manual.htm#section_find

это самый эффективный способ сделать это. он имеет встроенный искатель, чтобы найти элементы HTML и сформировать его в соответствии с вашими потребностями.

0

По вопросам рекламы [email protected]