2009-04-20 15 views
4

すべてのテキストノードを取得するために、DOMドキュメント全体を走査する次の(PHP)コードがあります。それは醜いソリューションのビットだ、と私はより良い方法がなければならないと確信している...ので、あるのでしょうか?DOM:ドキュメント内のすべてのテキストノードを取得する(PHP)

$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; 
    } 
} 

ありがとうございます。

答えて

10

必要なXPath式が//text()です。 DOMXPath::queryでそれを使用してみてください。例:

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

完璧、ありがとう! :-) –

0

preg_splitは機能しますか?

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

は、今までに使用したり、解析または修正するXML /(X)HTML/DOMの内容のための正規表現に依存しないでください。これを読む:http://stackoverflow.com/a/1732454/1879194 – Kafoso

関連する問題