Hola:
No siempre se corresponden los nodos con lo que piensas... por ejemplo sabiendo que document.documentElement es el tag html, el primero de los nodos hijos (childNodes[0]) puede que sea un retorno de carro... o sea un nodo de texto y no la etiqueta head (supongo que estará definida)... y normalmente entre el head y el body metemos otro salto de línea... así que el head podría ser el 1 y el body el 3
Hay formas de saberlo como el atributo nodeType, o el nodeName... (hay más).
En la página mencionada está también el código que he usado (viejo código)... pero básicamente es con un bucle while... buscar los nodos que son etiquetas (nodeType == 1)
Deberás tomártelo con calma...
Saludos