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     

 

posted @ 2013-06-18 17:23  xurui  阅读(251)  评论(0编辑  收藏  举报