2 let doc = Minidom.doc_load "test.xml"
4 let root = Minidom.doc_get_root_node doc
6 let check_attribute_ns attr =
8 let ns_uri = Minidom.attr_get_ns_uri attr
9 and attr_name = Minidom.attr_get_name attr
10 and attr_value = Minidom.attr_get_value attr
11 and parent = Minidom.attr_get_parent attr
13 match parent,ns_uri,attr_name,attr_value with
14 Some parent_node,Some uri,Some attribute_name,Some attribute_value ->
15 let attr_value = Minidom.node_get_attribute_ns parent_node attribute_name uri
19 Printf.printf "found the attribute with ns %s (was %s)\n"
20 (Minidom.string_of_mDOMString attr1) (Minidom.string_of_mDOMString attribute_value)
22 Printf.printf "attribute not found (uri was %s)!!!!\n" (Minidom.string_of_mDOMString uri)
25 Printf.printf "parent_node == NULL || uri == NULL || attribute_name == NULL || attribute_value == NULL\n"
28 let print_attribute attr =
29 check_attribute_ns attr;
30 let ns_uri = Minidom.attr_get_ns_uri attr
34 Some uri -> Printf.printf " %s:" (Minidom.string_of_mDOMString uri);
37 match ((Minidom.attr_get_name attr), (Minidom.attr_get_value attr)) with
38 (Some attr_name, Some attr_value) ->
39 Printf.printf " %s=\"%s\"" (Minidom.string_of_mDOMString attr_name) (Minidom.string_of_mDOMString attr_value)
40 | (Some attr_name, _) ->
41 Printf.printf " ??? attribute %s has no value !!!" (Minidom.string_of_mDOMString attr_name)
43 Printf.printf " ??? very strange attribute !!!"
46 let rec print_node n node =
47 if Minidom.node_is_blank node then ()
48 else if Minidom.node_is_element node then begin
49 match Minidom.node_get_name node with
52 let children = Minidom.node_get_children node
53 and attributes = Minidom.node_get_attributes node
54 and ns_uri = Minidom.node_get_ns_uri node
55 and is_first,is_last = (Minidom.node_is_first node), (Minidom.node_is_last node)
57 for i = 1 to n do print_char ' ' done;
61 Some uri -> Printf.printf "%s:" (Minidom.string_of_mDOMString uri)
64 Printf.printf "%s" (Minidom.string_of_mDOMString node_name);
65 List.iter print_attribute attributes;
67 List.iter (print_node (n + 2)) children;
68 for i = 1 to n do print_char ' ' done;
69 Printf.printf "</%s>\n" (Minidom.string_of_mDOMString node_name)
71 | None -> Printf.printf "??? this node has no name !!!\n"
72 end else if Minidom.node_is_text node then begin
73 match Minidom.node_get_content node with
75 for i = 1 to n do print_char ' ' done;
76 Printf.printf "%s\n" (Minidom.string_of_mDOMString node_content)
77 | None -> Printf.printf "??? this node has no content !!!\n"
79 Printf.printf "don't know how to manage a node with type %d\n" (Minidom.node_get_type node)