Hola:
Los nodos pueden tener o no subnodos... eso se sabe con hasChildNodes()... si hay nodos, pueden ser simple texto u otras cosas que puedes recorrer desde la colección childNodes, o empezar por el firstChild, y seguir con los siguientes (nextSibling), mientras los haya... se puede comparar con lastChild...
Léelo despacio porque no pretendo liarte...
Saludos