Как удалить HTML-текст между HTML-тегами в PHP с помощью SimpleHtmlDom - PullRequest
1 голос
/ 21 января 2011

Использование http://simplehtmldom.sourceforge.net/ Я знаю, что это может извлечь HTML-текст:

<?php
include('simple_html_dom.php');
// Create DOM from URL
echo file_get_html('http://www.google.com/')->plaintext; 

?>

Но как удалить весь текст?

Например, если у меня есть этот входной HTML:

<html>
    <head>
        <title>Example</title>
    </head>
    <body>
        <h1>Lore Ipsum</h1>
        <p>
            Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<br/>
            Aenean <em>commodo</em> ligula eget dolor. Aenean massa.
        </p>
    </body>
</html>

Я хотел бы получить этот вывод с SimpleHtmlDom:

<html>
    <head>
        <title></title>
    </head>
    <body>
        <h1></h1>
        <p><br/></p>
    </body>
</html>

Другими словами, я хочусохранить структуру документа.

Пожалуйста, помогите.

Ответы [ 2 ]

3 голосов
/ 21 января 2011

Я не знаю наверняка, как это сделать с SimpleHtmlDom.Из его руководства я бы предположил что-то вроде

$html = file_get_html('http://www.google.com/');
foreach( $html->find('text') as $text) {
    $text->plaintext = '';
}

Однако вы также можете использовать собственный анализатор DOM PHP.Он может выполнять запросы XPath и в целом должен работать намного быстрее:

libxml_use_internal_errors(TRUE);
$dom = new DOMDocument;
$dom->loadHTMLFile('http://www.google.com');
$xp = new DOMXPath($dom);
foreach ($xp->query('//text()') as $textNode) {
    $textNode->parentNode->removeChild($textNode);
}
$dom->formatOutput = TRUE;
echo $dom->saveXML($dom->documentElement);
1 голос
/ 21 января 2011

Установить innertext Свойство элемента HTML в пустую строку

Использование simplehtmldom.php:

$my_html = file_get_html('http://www.google.com/'); 
$my_html->innertext = "";
...