2016-06-01 6 views
1

Я использую Symfony DomCrawler для получения всего текста в документе.Как получить все внешние элементы TEXT в документе HTML

$this->crawler->filter('p')->each(function (Crawler $node, $i) { 
    // process text 
}); 

Я пытаюсь собрать весь текст в пределах <body>, которые находятся за пределами элементов.

<body> 
    This is an example 
    <p> 
     blablabla 
    </p> 
    another example 
    <p> 
     <span>Yo!</span> 
     again, another piece of text <br/> 
     with an annoy BR in the middle 
    </p> 
</body> 

Я использую PHP Symfony и могу использовать XPath (предпочтительно) или RegEx.

+0

Я не знаю о Symfony DomCrawler, но XPath для получения текстового узла, который находится непосредственно в '', будет: '// body/text()' (некоторый процессор XPath не поддерживает возвращающий текстовый узел, хотя) – har07

+0

Учитывает ли это текст во вложенных элементах? –

+1

Нет. Если вы пошли, просто добавьте еще один '/': '// body // text()' – har07

ответ

0

Значение строки всего документа может быть получена с помощью этого простого XPath:

string(/) 

Все текстовые узлы в документе будут:

//text() 

Непосредственные текст узла дети body бы be:

/body/text() 

Обратите внимание, что XPaths, которые выбирают текстовые узлы woul d обычно преобразуются в значения конкатенированных строк в зависимости от контекста.

Смежные вопросы