解析html并删除保留TAGS的文本

时间:2014-12-27 04:14:03

标签: php dom html-parsing

PHP简单dom允许我们获取HTML页面并仅提取标记,留下文本。像这样:

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

我正在寻找该方法的相反。删除所有文本并仅保留标记。那存在吗?我似乎找不到任何参考。

2 个答案:

答案 0 :(得分:1)

在实际的W3C DOM api(不是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 :(得分:0)

不要使用任何搜索并替换php函数或regexp。它们意味着要解析和重新组合字符串和更大的文本。使用符合HTML DOM解析的东西。

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

例如,要查找html文档中的所有img标记,请执行以下操作:

// 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>'; 

如果你转到下面的网址,你将学习如何在加载的html页面中找到html元素

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

这是实现这一目标的最有效方式。这有一个内置的查找器来定位html元素并根据您的需要形成它。