Percurso iterativo de DOM

O PHP limitou o tamanho da pilha quando se trata de recursão. Por causa dessa análise recursiva de DOM pode não ser adequada (você terá que aumentar o tamanho da pilha). Usar o algoritmo de remoção da fila, no entanto, é rápido e fácil:

// $xml is an instance of DOMDocument
// replace with 'body' if you don't need the header tags
$node
= $xml->getElementsByTagName('html')->item(0);
$level
= 0;

$nodes
= array($level => array($node));
do {
while (!empty($nodes[$level])) {
$node
= array_shift($nodes[$level]); // FIFO
// do whatherver you like with the node
...

if ($node->childNodes && $node->childNodes->length) {
$level
++;
$nodes
[$level] = array();
foreach ($node->childNodes as $childNode) {
array_push
($nodes[$level], $childNode);
}
}
}
$level
--;
} while ($level > 0);