Как найти текстовые узлы в фрагменте HTML? - PullRequest
5 голосов
/ 24 января 2011

Я пытаюсь разобрать фрагмент HTML, используя функции PHP DOM. Я удалил все, кроме тегов абзаца, диапазона и разрыва строки, и теперь я хочу получить весь текст вместе с сопровождающими его стилями.

Итак, я хотел бы получить каждый фрагмент текста, один за другим, и для каждого я могу затем вернуться в дерево, чтобы получить значения определенных атрибутов (меня интересуют только некоторые конкретные как цвет и т. д.).

Как я могу это сделать? Или я думаю об этом не так?

Спасибо!

Ответы [ 2 ]

10 голосов
/ 24 января 2011

Предположим, у вас есть 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.

Надеюсь, что это может дать вам хорошее начало.

3 голосов
/ 24 января 2011

Для тех, кому удобнее использовать селекторы 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...