let load_student_file (s:string) = 
    groupssel    := [];   (* Set during the parsing *)
    num_groups   := [];   (* Set during the parsing *)
    all_groups   := [];   (* Set during the parsing *)
    ref_validity := [];   (* Set during the parsing *)
    etud_file    := (if ((String.length s) = 0) then "" 
                     else if ((String.get s 0) != '/'then
                       (base_dir^"/"^s) else s);
    debug (Printf.sprintf "Load    : '%s'" !etud_file);
    try 
      let in_chan = open_in s in 
        student_list := parse_file_from_xml in_chan;
        update_groups_size !student_list;
        close_in in_chan;
    with 
      | Xml.Error e -> begin
          debug (Printf.sprintf "\\x1B[31;1m!!!\\x1B[0m Error when parsing '%s' : %s"
                   !etud_file (Xml.error e));
          student_list := []; (* Clears previous contents *)
        end;
      | Xml.File_not_found s -> begin
          debug (Printf.sprintf "\\x1B[31;1m!!!\\x1B[0m Error when loading '%s' : %s" 
                   !etud_file s);
          student_list := []; (* Clears previous contents *)
        end;
      | Sys_error s -> begin
          debug (Printf.sprintf "\\x1B[31;1m!!!\\x1B[0m Error when loading '%s' %s" 
                   !etud_file s);
          student_list := []; (* Clears previous contents *)
        end