如何在HTML片段中找到文本节点?

时间:2011-01-24 12:49:12

标签: php dom

我正在尝试使用PHP DOM函数解析HTML代码段。除了段落,跨度和换行符之外,我已经删除了所有内容,现在我想要检索所有文本及其附带的样式。

所以,我想逐一获取每一段文字,然后我可以回到树上获取特定属性的值(我只对某些特定属性感兴趣,喜欢颜色等。)。

我该怎么做?或者我是以错误的方式思考它?

谢谢!

2 个答案:

答案 0 :(得分:10)

假设您在这里有一个DOMDocument:

$doc = new DOMDocument();
$doc->loadHTMLFile('http://stackoverflow.com/');

您可以使用简单的Xpath找到所有文本节点。

$xpath = new DOMXpath($doc);
$textNodes = $xpath->query('//text()');

只需foreach遍历所有文本节点:

foreach ($textNodes as $textNode) {
    echo $textNode->data . "\n";
}

由此,您可以使用->parentNode上传DOM树。

希望这可以给你一个良好的开端。

答案 1 :(得分:3)

对于那些对CSS3选择器更为满意的人,并且愿意在他们的项目中包含一个额外的PHP类,我建议使用Simple PHP DOM parser。解决方案如下所示:

$html = file_get_html('http://www.example.com/');

$ret = $html->find('p, span');    
$store = array();

foreach($ret as $element) {
    $store[] = array($element->tag => array('text' => $element->innertext, 
                                            'color' => $element->color, 
                                            'style' => $element->style));
}
print_r($store);