Как я могу найти текстовые узлы в фрагменте HTML?
Вопрос
Я пытаюсь проанализировать фрагмент HTML, используя функции PHP DOM. Я исключил все, кроме абзаца, билетов и линейных перерывов, и теперь я хочу извлечь весь текст, а также сопровождающие его стили.
Итак, я хотел бы получить каждый кусок текста, один за другим, и для каждого я могу затем вернуться к дереву, чтобы получить значения определенных атрибутов (меня интересуют только некоторые конкретные, такие как цвет и т. Д. .).
Как я могу это сделать? Или я думаю об этом неправильно?
Спасибо!
Нет правильного решения
Другие советы
Предположим, у вас здесь есть 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";
}
Из этого вы можете подняться на дерево DOM, используя ->parentNode
.
Надеюсь, что это может дать вам хорошее начало.
Для тех, кому более удобно с селекторами CSS3 и готовы включить в свой проект один дополнительный класс PHP, я бы предложил использовать использование Простой 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);