xml文件的创建和解析代码
from xml.dom.minidom import parse
from xml.dom import minidom
import xml.etree.ElementTree as et
# xml格式
'''
<?xml version="1.0" encoding="utf-8"?>
<annotation>
<folder>img</folder>
<filename>1.jpg</filename>
<object>
<name>equip</name>
<bndbox>
<xmin>197</xmin>
<ymin>56</ymin>
<xmax>742</xmax>
<ymax>929</ymax>
</bndbox>
</object>
</annotation>
'''
# 创建xml文件
def writeXML(save_path):
# 文档树
# domTree = parse('./testxml.xml') # 在已有的文件写入
domTree = minidom.Document() # 创建新的xml
# 创建新的annotation节点
annotation_node = domTree.createElement('annotation')
# 用DOM对象添加根节点
domTree.appendChild(annotation_node)
# 创建folder节点
folder_node = domTree.createElement('folder')
# 创建folder节点的文字节点
folder_text_value = domTree.createTextNode('img')
# 文字节点加入folder节点
folder_node.appendChild(folder_text_value)
# folder节点加入annotation节点
annotation_node.appendChild(folder_node)
filename_node = domTree.createElement('filename')
filename_text_value = domTree.createTextNode('1.jpg')
filename_node.appendChild(filename_text_value)
annotation_node.appendChild(filename_node)
object_node = domTree.createElement('object')
annotation_node.appendChild(object_node)
name_node = domTree.createElement('name')
name_text_value = domTree.createTextNode('equip')
name_node.appendChild(name_text_value)
object_node.appendChild(name_node)
bndbox_node = domTree.createElement('bndbox')
object_node.appendChild(bndbox_node)
xmin_node = domTree.createElement('xmin')
xmin_text_value = domTree.createTextNode('197')
xmin_node.appendChild(xmin_text_value)
bndbox_node.appendChild(xmin_node)
ymin_node = domTree.createElement('ymin')
ymin_text_value = domTree.createTextNode('56')
ymin_node.appendChild(ymin_text_value)
bndbox_node.appendChild(ymin_node)
xmax_node = domTree.createElement('xmax')
xmax_text_value = domTree.createTextNode('742')
xmax_node.appendChild(xmax_text_value)
bndbox_node.appendChild(xmax_node)
ymax_node = domTree.createElement('ymax')
ymax_text_value = domTree.createTextNode('929')
ymax_node.appendChild(ymax_text_value)
bndbox_node.appendChild(ymax_node)
with open(save_path, 'w') as f:
domTree.writexml(f, addindent='\t',newl='\n', encoding='utf-8')
print('create the xml file finish!')
# xml解析
def parse_xml(xml_path):
# 解析xml文件
tree_obj = et.parse(xml_path)
# 获取节点元素
root = tree_obj.getroot()
folder = root.find('folder').text
filename = root.find('filename').text
for object in root.findall('object'):
name = object.find('name').text
xmin = int(object.find('bndbox').find('xmin').text)
ymin = int(object.find('bndbox').find('ymin').text)
xmax = int(object.find('bndbox').find('xmax').text)
ymax = int(object.find('bndbox').find('ymax').text)
print(f'folder:{folder}, filename:{filename}, name:{name}, xmin:{xmin}, ymin:{ymin}, xmax:{xmax}, ymax:{ymax}')
print('parse the xml file finish!')
if __name__ == "__main__":
save_path = './test.xml'
writeXML(save_path)
parse_xml(save_path)