Sólo un pequeño error:
Cita: if (almacen.hasChildNodes)
Esta sentencia será siempre cierta hasta dar error, porque lo que estás comprobando no es que tenga hijos nodos, sino que esa función (hasChildNodes) exista en el elemento "almacén". Por lo tanto usa paréntesis y devolverá el valor true/false que es lo que buscamos.