我正在尝试使用PHP DOM函数解析HTML代码段。我已经删除了除段落,跨度和换行符之外的所有内容,现在我想检索所有文本及其伴随的样式。
所以,我想逐个获取每段文本,然后我可以往后逐一回到树上以获取特定属性的值(我只对某些特定属性感兴趣,例如颜色等)。
我该怎么做?还是我想错了方向?
假设您在这里有一个DOMDocument:
$doc = new DOMDocument();
$doc->loadHTMLFile('http://stackoverflow.com/');
您可以使用简单的Xpath查找所有文本节点。
$xpath = new DOMXpath($doc);
$textNodes = $xpath->query('//text()');
只需在其foreach
上遍历所有textnode:
foreach ($textNodes as $textNode) {
echo $textNode->data . "\n";
}
由此,您可以使用->parentNode
进入DOM树。
希望这可以给您一个良好的开端。
对于那些更熟悉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);