如何使用SimpleHtmlDom删除PHP中的html标记之间的HTML文本

时间:2011-01-21 06:10:50

标签: php html-parsing

使用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 个答案:

答案 0 :(得分:3)

我不知道如何使用SimpleHtmlDom做到这一点。从它的手册,我假设像

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

但是,您也可以使用PHP的本机DOM解析器。它可以执行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 :(得分:1)

将HTML元素的innertext属性设置为空字符串

使用simplehtmldom.php:

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