DOM: выбор всех текстовых узлов в документе (PHP)

У меня есть следующий (PHP) код, который проходит весь документ DOM, чтобы получить все текстовые узлы. Это немного уродливое решение, и я уверен, что должен быть лучший способ … так, не так ли?

$skip = false; $node = $document; $nodes = array(); while ($node) { if ($node->nodeType == 3) { $nodes[] = $node; } if (!$skip && $node->firstChild) { $node = $node->firstChild; } elseif ($node->nextSibling) { $node = $node->nextSibling; $skip = false; } else { $node = $node->parentNode; $skip = true; } } 

Благодарю.

Выражение XPath, которое вам нужно, – //text() . Попробуйте использовать его с DOMXPath::query . Например:

 $xpath = new DOMXPath($doc); $textnodes = $xpath->query('//text()'); 

Будет ли preg_split работать для вас?

 $textNodes = preg_split( '/<[^]+>/', $documentContent, -1, PREG_SPLIT_NO_EMPTY );