public virtual void visit(XmlDocument xmlDocument)
        {
            if (cancellationRequestedChecker())
            {
                return;
            }
            OuStudent ouStudent = OuStudent.parse(xmlDocument);

            if (null == ouStudent)
            {
                onCouldNotParseStudentHome();
                return;
            }
            visit(ouStudent, xmlDocument);
        }
        public virtual void visit(OuStudent ouStudent, XmlDocument xmlDocument)
        {
            if (cancellationRequestedChecker())
            {
                return;
            }
            IList <OuStudentModule> ouStudentModules = ouStudent.modules.OrderByDescending(m => m.presentation).ToList();

                                #if DEBUG
            foreach (OuStudentModule ouStudentModule in ouStudentModules)
            {
                Debug.WriteLine("Found module: {0}", ouStudentModule);
            }
                                #endif

            using (new WritingIndentation(log)) {
                foreach (OuStudentModule ouStudentModule in ouStudentModules)
                {
                    visitStudentModule(ouStudentModule);
                }
            }
        }