Получение содержимого узла, имеющего потомки, через DOMDocument - PullRequest
2 голосов
/ 03 июня 2010

У меня есть следующий HTML:

<html ><body >Body text <div >div content</div></body></html>

Как я могу получить содержимое тела без вложенного <div>? Мне нужно получить текст сообщения, но я не знаю, как это сделать.

результат выполнения

$domhtml = DOMDocument::loadHTML($html);
print $domhtml->getElementsByTagName('body')->item(0)->nodeValue;

- это «текстовое содержимое тела», что я не совсем хочу получить

Ответы [ 3 ]

5 голосов
/ 03 июня 2010

Я предпочитаю DOMXPath для подобных проблем. Это очень гибкий

$domhtml = DOMDocument::loadHTML($html); 
$xpath = new DOMXPath($domhtml);
$query="/html/body/text()"; //gets all text nodes that are direct children of body

$txtnodes = $xpath->query($query);

foreach ($txtnodes as $txt) {
    echo $txt->nodeValue;
}
2 голосов
/ 03 июня 2010
$domhtml = DOMDocument::loadHTML($html);
print $domhtml->getElementsByTagName('body')->item(0)->textContent;
0 голосов
/ 04 июня 2010

На основе комментариев от php.net Это должно работать для вас:

$domhtml = DOMDocument::loadHTML($html); 
print $domhtml->getElementsByTagName('body')->firstChild->nodeValue;
...