private void GuardarDocumentos( string directory , string header , string footer , NodoArbol nodo , ArrayList archivosGenerados , WebIndex indexer )
        {
            if( nodo.body != null )
            {
                string texto = "";
                if( nodo.body.innerText != null )
                    texto = nodo.body.innerText.Trim();

                if( !texto.Equals("") )
                {
                    bool guardar = true;
                    string titulo = "";
                    IHTMLElement seccion = null;

                    seccion = SearchFirstCutNode( nodo.body );
                    if( seccion != null && seccion.innerText != null )
                    {
                        titulo = seccion.innerText.Trim() ;
                        if( titulo.Length == 0 )
                            guardar = false;
                    }

                    if( guardar )
                    {
                        // hacer un preproceso de TODOS los nodos del cuerpo:
                        IHTMLElementCollection col = (IHTMLElementCollection)nodo.body.children;
                        foreach( IHTMLElement nodoBody in col )
                            PreProcesarNodo( nodoBody , null);

                        // Generar el documento a guardar:

                        IHTMLDOMNode domNode = (IHTMLDOMNode)nodo.body;
                        IHTMLElement clonedBody = (IHTMLElement)domNode.cloneNode(true);

                        // Si hay pie o cabecera, añadirlos al body:
                        if (header != null && !header.Equals(""))
                            clonedBody.insertAdjacentHTML("afterBegin", header);
                        if (footer != null && !footer.Equals(""))
                            clonedBody.insertAdjacentHTML("beforeEnd", footer);

                        iDoc.title = titulo;
                        AntesYDespuesBody();

                        string archivo = directory + Path.DirectorySeparatorChar + nodo.Archivo;

                        Encoding encoding = Encoding.GetEncoding( iDoc.charset );
                        StreamWriter writer = new StreamWriter( archivo , false , encoding );
                        writer.WriteLine( textoAntesBody );
                        texto = clonedBody.outerHTML;

                        // Parece que hay un bug por el cual pone about:blank en los links. Quitarlos:
                        texto = texto.Replace( "about:blank" , "" ).Replace("about:" , "" );
                        writer.WriteLine( texto );
                        writer.WriteLine( textoDespuesBody );
                        writer.Close();

                        // Clean the files using Tidy
                        TidyOutputFile(archivo);

                        if (FirstChapterContent == null)
                        {
                            // This is the first chapter of the document. Store it clean, because
                            // we will need after.
                            FirstChapterContent = nodo.body.innerHTML.Replace("about:blank", "").Replace("about:", "");
                        }

                        archivosGenerados.Add( archivo );

                        if (indexer != null)
                            // Store the document at the full text search index:
                            indexer.AddPage(nodo.Archivo, nodo.Title , clonedBody );
                    }
                }
            }

            foreach( NodoArbol hijo in nodo.Hijos )
                GuardarDocumentos( directory , header , footer , hijo , archivosGenerados , indexer );
        }
        private void GuardarDocumentos(string directory, HtmlPageDecorator decorator, NodoArbol nodo, ArrayList archivosGenerados, WebIndex indexer)
        {
            if( nodo.body != null )
            {
                string texto = "";
                if( nodo.body.innerText != null )
                    texto = nodo.body.innerText.Trim();

                if( !texto.Equals("") )
                {
                    bool guardar = true;
                    string titulo = "";
                    IHTMLElement seccion = null;

                    seccion = SearchFirstCutNode( nodo.body );
                    if( seccion != null && seccion.innerText != null )
                    {
                        titulo = seccion.innerText.Trim() ;
                        if( titulo.Length == 0 )
                            guardar = false;
                    }

                    if( guardar )
                    {
                        // hacer un preproceso de TODOS los nodos del cuerpo:
                        IHTMLElementCollection col = (IHTMLElementCollection)nodo.body.children;
                        foreach( IHTMLElement nodoBody in col )
                            PreprocessHtmlNode( nodoBody , null);

                        // Save the section, adding header, footers, etc:
                        string filePath = directory + Path.DirectorySeparatorChar + nodo.Archivo;
                        decorator.ProcessAndSavePage(nodo.body, filePath, nodo.Name);

                        if (FirstChapterContent == null)
                        {
                            // This is the first chapter of the document. Store it clean, because
                            // we will need after.
                            FirstChapterContent = nodo.body.innerHTML.Replace("about:blank", "").Replace("about:", "");
                        }

                        archivosGenerados.Add(filePath);

                        if (indexer != null)
                            // Store the document at the full text search index:
                            //indexer.AddPage(nodo.Archivo, nodo.Title, nodo.body);
                            indexer.AddPage(nodo.Archivo, nodo.Name, nodo.body);

                    }
                }
            }

            foreach( NodoArbol hijo in nodo.Hijos )
                GuardarDocumentos( directory , decorator , hijo , archivosGenerados , indexer );
        }