let rec xml_to_project (gnum:int) (start:paddress) (x:Xml.xml) =
let pnum = int_of_string (Xml.attrib x "num") in
let padd = start@[pnum] in
let pname = (try Xml.attrib x "name" with _ -> "") in
let pid = (try Xml.attrib x "id" with _ -> "") in
let pcoeff = (try float_of_string (Xml.attrib x "coeff") with _ -> 0.) in
let pdgrad = (try float_of_string (Xml.attrib x "dgrad") with _ -> (-1.)) in
update_group_project_name gnum padd pname;
update_group_project_id gnum padd pid;
update_group_project_coeff gnum padd pcoeff;
update_group_project_dgrad gnum padd pdgrad;
let teams = filter_tag (Xml.children x) "team" in
List.iter (fun xc -> xml_to_team gnum padd xc) teams;
let subpro = filter_tag (Xml.children x) "project" in
List.iter (fun xc -> xml_to_project gnum padd xc) subpro