Как я могу найти текстовые узлы в фрагменте HTML?

StackOverflow https://stackoverflow.com/questions/4782152

  •  23-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь проанализировать фрагмент 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top