let rec group_of_xmls g = function
[] -> g
| (PCData _ ) :: q -> group_of_xmls g q
| (Element (e, atts, subs)) :: q ->
(
match String.lowercase e with
| s when s = group_tag ->
let group = Tdl_types.group () in
group.group_title <-
get_att ~required: false atts att_title;
group.group_id <- map_opt
int_of_string (get_opt_att atts att_id);
g.group_groups <-
g.group_groups @ [group_of_xmls group subs];
| s when s = item_tag ->
(
try
let item = Tdl_types.item () in
item.item_title <- get_att atts att_title;
item.item_date <-
Tdl_date.parse
(
try
(get_att ~required: false atts att_date)
with _ -> Tdl_date.mk_mail_date (Unix.time ())
);
item.item_enddate <-
(
try
Some (Tdl_date.parse
(get_att ~required: false atts att_enddate))
with _ -> None
);
item.item_state <-
(state_of_string
(get_att ~required:false atts att_state));
item.item_desc <- get_item_desc subs;
item.item_id <- map_opt
int_of_string (get_opt_att atts att_id);
g.group_items <- g.group_items @ [item]
with
e ->
()
)
| _ ->
()
);
group_of_xmls g q