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