let doc = Minidom.doc_load "test.xml" let root = Minidom.doc_get_root_node doc let check_attribute_ns attr = Printf.printf "\n\n"; let ns_uri = Minidom.attr_get_ns_uri attr and attr_name = Minidom.attr_get_name attr and attr_value = Minidom.attr_get_value attr and parent = Minidom.attr_get_parent attr in match parent,ns_uri,attr_name,attr_value with Some parent_node,Some uri,Some attribute_name,Some attribute_value -> let attr_value = Minidom.node_get_attribute_ns parent_node attribute_name uri in begin match attr_value with Some attr1 -> Printf.printf "found the attribute with ns %s (was %s)\n" (Minidom.string_of_mDOMString attr1) (Minidom.string_of_mDOMString attribute_value) | None -> Printf.printf "attribute not found (uri was %s)!!!!\n" (Minidom.string_of_mDOMString uri) end | _ -> Printf.printf "parent_node == NULL || uri == NULL || attribute_name == NULL || attribute_value == NULL\n" ;; let print_attribute attr = check_attribute_ns attr; let ns_uri = Minidom.attr_get_ns_uri attr in begin match ns_uri with Some uri -> Printf.printf " %s:" (Minidom.string_of_mDOMString uri); | None -> () end; match ((Minidom.attr_get_name attr), (Minidom.attr_get_value attr)) with (Some attr_name, Some attr_value) -> Printf.printf " %s=\"%s\"" (Minidom.string_of_mDOMString attr_name) (Minidom.string_of_mDOMString attr_value) | (Some attr_name, _) -> Printf.printf " ??? attribute %s has no value !!!" (Minidom.string_of_mDOMString attr_name) | (_,_) -> Printf.printf " ??? very strange attribute !!!" ;; let rec print_node n node = if Minidom.node_is_blank node then () else if Minidom.node_is_element node then begin match Minidom.node_get_name node with Some node_name -> begin let children = Minidom.node_get_children node and attributes = Minidom.node_get_attributes node and ns_uri = Minidom.node_get_ns_uri node and is_first,is_last = (Minidom.node_is_first node), (Minidom.node_is_last node) in for i = 1 to n do print_char ' ' done; Printf.printf "<"; begin match ns_uri with Some uri -> Printf.printf "%s:" (Minidom.string_of_mDOMString uri) | None -> () end; Printf.printf "%s" (Minidom.string_of_mDOMString node_name); List.iter print_attribute attributes; Printf.printf ">\n"; List.iter (print_node (n + 2)) children; for i = 1 to n do print_char ' ' done; Printf.printf "\n" (Minidom.string_of_mDOMString node_name) end | None -> Printf.printf "??? this node has no name !!!\n" end else if Minidom.node_is_text node then begin match Minidom.node_get_content node with Some node_content -> for i = 1 to n do print_char ' ' done; Printf.printf "%s\n" (Minidom.string_of_mDOMString node_content) | None -> Printf.printf "??? this node has no content !!!\n" end else begin Printf.printf "don't know how to manage a node with type %d\n" (Minidom.node_get_type node) end ;; print_node 0 root;;