xml_python 手动编写 XML 文件

思想:

  • 创建根节点
  • 创建子节点
  • 将子节点挂靠到根节点上(嵌套时就重复这三步)

python 代码:

 1 ### 参考链接:https://blog.csdn.net/qq_37174526/article/details/89489212
 2 from xml.dom import minidom
 3 
 4 # 参数:xml_save_path、filename(文件名称)、filepath(文件绝对路径)、
 5 def writeXML(xml_save_path):  
 6     # 1.创建 DOM 树对象
 7     dom = minidom.Document()
 8     # 2.创建根节点。每次都要用DOM对象来创建任何节点。
 9     root_node = dom.createElement('annotation')
10     # 3.用 DOM 对象添加根节点
11     dom.appendChild(root_node)
12     
13     ## folder 子节点
14     folder_node = dom.createElement('folder')  # 创建子节点
15     root_node.appendChild(folder_node)         # 将创建的子节点挂到根节点上
16     folder_text = dom.createTextNode('lyj')    # 创建文本节点
17     folder_node.appendChild(folder_text)       # 将创建的文本节点挂到子节点上
18     
19     ## filename 子节点, 需要传进参数 filename
20     filename_node = dom.createElement('filename')
21     root_node.appendChild(filename_node)         
22     filename_text = dom.createTextNode('文件名称')
23     filename_node.appendChild(filename_text)
24 
25     ## filepath 子节点, 需要传进参数 filepath
26     filepath_node = dom.createElement('filepath') 
27     root_node.appendChild(filepath_node)          
28     filepath_text = dom.createTextNode('文件绝对路径') 
29     filepath_node.appendChild(filepath_text)       
30 
31     ## size 子节点,需要传进参数 w、h、c
32     size_node = dom.createElement('size')
33     root_node.appendChild(size_node)
34 
35     width_node = dom.createElement('width')
36     size_node.appendChild(width_node)
37     width_text = dom.createTextNode('图宽')
38     width_node.appendChild(width_text)
39 
40     height_node = dom.createElement('height')
41     size_node.appendChild(height_node)
42     height_text = dom.createTextNode('图高')
43     height_node.appendChild(height_text)
44 
45     depth_node = dom.createElement('depth')
46     size_node.appendChild(depth_node)
47     depth_text = dom.createTextNode('通道数')
48     depth_node.appendChild(depth_text)
49 
50     ### 创建 object 节点
51     for i in range(1):
52         object_node = dom.createElement('object')
53         root_node.appendChild(object_node)
54 
55         name_node = dom.createElement('name')
56         object_node.appendChild(name_node)
57         name_text = dom.createTextNode('类别名称')
58         name_node.appendChild(name_text)
59 
60         bndbox_node = dom.createElement('bndbox')
61         object_node.appendChild(bndbox_node)
62 
63         xmin_node = dom.createElement('xmin')
64         bndbox_node.appendChild(xmin_node)
65         xmin_text = dom.createTextNode('x_min')
66         xmin_node.appendChild(xmin_text)
67 
68         ymin_node = dom.createElement('ymin')
69         bndbox_node.appendChild(ymin_node)
70         ymin_text = dom.createTextNode('y_min')
71         ymin_node.appendChild(ymin_text)
72 
73         xmax_node = dom.createElement('xmax')
74         bndbox_node.appendChild(xmax_node)
75         xmax_text = dom.createTextNode('x_max')
76         xmax_node.appendChild(xmax_text)
77 
78         ymax_node = dom.createElement('ymax')
79         bndbox_node.appendChild(ymax_node)
80         ymax_text = dom.createTextNode('y_max')
81         ymax_node.appendChild(ymax_text)
82 
83 
84     # 每一个结点对象(包括dom对象本身)都有输出XML内容的方法,如:toxml()--字符串, toprettyxml()--美化树形格式。
85     
86     try:
87         with open(xml_save_path,'w',encoding='UTF-8') as fh:
88             # 4.writexml()第一个参数是目标文件对象,第二个参数是根节点的缩进格式,第三个参数是其他子节点的缩进格式,
89             # 第四个参数制定了换行格式,第五个参数制定了xml内容的编码。
90             dom.writexml(fh,indent='',addindent='\t',newl='\n',encoding='UTF-8')
91             print('OK, xml 文件创建成功。')
92     except Exception as err:
93         print('错误:{err}'.format(err=err))
94 
95 if __name__ == '__main__':
96     xml_save_path = '/home/aistudio/myxml2.xml'
97     writeXML(xml_save_path)

创建结果展示:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <annotation>
 3     <folder>lyj</folder>
 4     <filename>文件名称</filename>
 5     <filepath>文件绝对路径</filepath>
 6     <size>
 7         <width>图宽</width>
 8         <height>图高</height>
 9         <depth>通道数</depth>
10     </size>
11     <object>
12         <name>类别名称</name>
13         <bndbox>
14             <xmin>x_min</xmin>
15             <ymin>y_min</ymin>
16             <xmax>x_max</xmax>
17             <ymax>y_max</ymax>
18         </bndbox>
19     </object>
20 </annotation>

 

posted @ 2020-10-19 09:14  Bro_Li  阅读(325)  评论(0编辑  收藏  举报