思想:
- 创建根节点
- 创建子节点
- 将子节点挂靠到根节点上(嵌套时就重复这三步)
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=' ',newl=' ',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>