python xml
1 from xml.etree.ElementTree import ElementTree,Element 2 3 def read_xml(in_path): 4 tree = ElementTree() 5 tree.parse(in_path) 6 return tree 7 8 def write_xml(tree, out_path): 9 tree.write(out_path, encoding="utf-8",xml_declaration=True) 10 11 def if_match(node, kv_map): 12 for key in kv_map: 13 if node.get(key) != kv_map.get(key): 14 return False 15 return True 16 17 #---------------search ----- 18 19 def find_nodes(tree, path): 20 return tree.findall(path) 21 22 23 def get_node_by_keyvalue(nodelist, kv_map): 24 result_nodes = [] 25 for node in nodelist: 26 if if_match(node, kv_map): 27 result_nodes.append(node) 28 return result_nodes 29 30 #---------------change ----- 31 32 def change_node_properties(nodelist, kv_map, is_delete=False): 33 for node in nodelist: 34 for key in kv_map: 35 if is_delete: 36 if key in node.attrib: 37 del node.attrib[key] 38 else: 39 node.set(key, kv_map.get(key)) 40 41 def change_node_text(nodelist, text, is_add=False, is_delete=False): 42 for node in nodelist: 43 if is_add: 44 node.text += text 45 elif is_delete: 46 node.text = "" 47 else: 48 node.text = text 49 50 def create_node(tag, property_map, content): 51 element = Element(tag, property_map) 52 element.text = content 53 return element 54 55 def add_child_node(nodelist, element): 56 for node in nodelist: 57 node.append(element) 58 59 def del_node_by_tagkeyvalue(nodelist, tag, kv_map): 60 for parent_node in nodelist: 61 children = parent_node.getchildren() 62 for child in children: 63 if child.tag == tag and if_match(child, kv_map): 64 parent_node.remove(child) 65 66 def case_and_para(path): 67 tree = read_xml(path) 68 allcase = find_nodes(tree,"TestList/ToolCase") 69 dictcase = {} 70 for case in allcase: 71 casename = case.attrib["name"] 72 print casename 73 parameter = find_nodes(case,"Parameters") 74 para = parameter[0].text 75 para = para.split('C:/Autobat/bat/')[1] 76 print para 77 dictcase[casename] = para 78 return dictcase