使用 from lxml import etree
不要使用 from xml.etree.ElementTree import ElementTree,Element
注意一定要使用 parser = etree.XMLParser(remove_blank_text=True)这个参数。
代码:
parser = etree.XMLParser(remove_blank_text=True)#
root=etree.parse('annotation/' + basename + '_' + str(x) + '_' + str(y) + '.xml',parser)#第一个参数是已经存在的文件
add_pic_attr(root, "pos", int(x_), int(y_), int(x_w), int(y_h))#向文件中添加节点的函数,后面5个参数是节点的信息
tree = etree.ElementTree(root.getroot())
tree.write('annotation/' + basename + '_' + str(x) + '_' + str(y) + '.xml',pretty_print=True, xml_declaration=False, encoding='utf-8')
#向文件中添加节点的函数,后面5个参数是节点的信息
def add_pic_attr(root,label,xmin,ymin,xmax,ymax):
object = etree.Element("object")
namen = etree.SubElement(object,"name")
namen.text = label
object.append(namen)
pose = etree.SubElement(object,"pose")
pose.text = str(0)
object.append(pose)
truncated = etree.SubElement(object,"truncated")
truncated.text = str(0)
object.append(truncated)
difficult = etree.SubElement(object,"difficult")
difficult.text = str(0)
object.append(difficult)
bndbox = etree.SubElement(object,"bndbox")
xminn = etree.SubElement(bndbox,"xmin")
xminn.text = str(xmin)
bndbox.append(xminn)
yminn = etree.SubElement(bndbox,"ymin")
yminn.text = str(ymin)
bndbox.append(yminn)
xmaxn = etree.SubElement(bndbox,"xmax")
xmaxn.text = str(xmax)
bndbox.append(xmaxn)
ymaxn = etree.SubElement(bndbox,"ymax")
ymaxn.text = str(ymax)
root.getroot().append(object)
初始文件
<annotation>
<folder>VOC2007</folder>
<filename>T2019_4_18_30.jpg</filename>
<source>
<annotation>PASCAL VOC2007</annotation>
<database>Unknown</database>
<image>flickr</image>
</source>
<size>
<width>919</width>
<height>878</height>
<depth>3</depth>
</size>
<object>
<name>pos</name>
<pose>0</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1</xmin>
<ymin>336</ymin>
<xmax>96</xmax>
<ymax>504</ymax>
</bndbox>
</object>
</annotation>
添加节点之后的文件,红色节点是添加节点之后的结果
<annotation>
<folder>VOC2007</folder>
<filename>T2019_4_18_30.jpg</filename>
<source>
<annotation>PASCAL VOC2007</annotation>
<database>Unknown</database>
<image>flickr</image>
</source>
<size>
<width>919</width>
<height>878</height>
<depth>3</depth>
</size>
<object>
<name>pos</name>
<pose>0</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1</xmin>
<ymin>336</ymin>
<xmax>96</xmax>
<ymax>504</ymax>
</bndbox>
</object>
<object>
<name>pos</name>
<pose>0</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>806</xmin>
<ymin>59</ymin>
<xmax>918</xmax>
<ymax>274</ymax>
</bndbox>
</object>
</annotation>