+++ /dev/null
-(* $Id$
- * ----------------------------------------------------------------------
- *
- *)
-
-(* Read a record-list, sort it, and print it as XML *)
-open Pxp_types;;
-open Pxp_document;;
-open Pxp_yacc;;
-
-let sort by tree =
- map_tree
- ~pre:
- (fun n -> n # orphaned_flat_clone)
- ~post:
- (fun n ->
- match n # node_type with
- T_element "record-list" ->
- let l = n # sub_nodes in
- let l' = List.sort
- (fun a b ->
- let a_string =
- try (find_element by a) # data
- with Not_found -> "" in
- let b_string =
- try (find_element by b) # data
- with Not_found -> "" in
- Pervasives.compare a_string b_string)
- l in
- n # set_nodes l';
- n
- | _ ->
- n)
- tree
-;;
-
-
-let main() =
- let criterion = ref "last-name" in
- Arg.parse
- [ "-by", Arg.String (fun s -> criterion := s),
- " (last-name|first-name|phone)";
- ]
- (fun _ -> raise (Arg.Bad "Bad usage"))
- "usage: sort [ options ]";
- if not(List.mem !criterion ["last-name"; "first-name"; "phone"]) then (
- prerr_endline ("Unknown criterion: " ^ !criterion);
- exit 1
- );
- try
- let dtd = parse_dtd_entity default_config (from_file "record.dtd") in
- let tree =
- parse_content_entity default_config (from_channel stdin) dtd default_spec
- in
- print_endline "<?xml encoding='ISO-8859-1'?>";
- (sort !criterion tree) # write (Out_channel stdout) `Enc_iso88591
- with
- x ->
- prerr_endline(string_of_exn x);
- exit 1
-;;
-
-
-main();;
-
-(* ======================================================================
- * History:
- *
- * $Log$
- * Revision 1.1 2000/11/17 09:57:32 lpadovan
- * Initial revision
- *
- * Revision 1.3 2000/08/30 16:05:44 gerd
- * Minor update
- *
- * Revision 1.2 2000/08/24 09:40:11 gerd
- * Allow that columns are missing.
- *
- * Revision 1.1 2000/08/22 21:57:44 gerd
- * Initial revision.
- *
- *
- *)