У меня есть следующий (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 );