root = dom.documentElement  # 得到文档元素对象
item = root.getElementsByTagName('path')  # 获取path这一node名字及相关属性值
for i in item:
    i.firstChild.data = f'D:/test/xmltest/xml_source/' + str(cnt).zfill(12) + '.jpg'  # xml文件对应的图片路径

with open(os.path.join(sv_path, xmlFile), 'w', encoding='utf-8') as fh:
    dom.writexml(fh)
cnt += 1
修改后变成这样。

<?xml version="1.0" ?>

<folder>测试图片</folder>
<filename>ae2f50b6a937df1e1a72f9bcc45b172d.jpg</filename>
<path>D:/test/xmltest/JPEGimage/000000000000.jpg</path>
<source>
	<database>Unknown</database>
</source>
<size>
	<width>800</width>
	<height>800</height>
	<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
	<name>class1</name>
	<pose>Unspecified</pose>
	<truncated>0</truncated>
	<difficult>0</difficult>
	<bndbox>
		<xmin>631</xmin>
		<ymin>275</ymin>
		<xmax>714</xmax>
		<ymax>509</ymax>
	</bndbox>
</object>

```

接下来修改图片名称。

import xml.dom.minidom
import os

path = r'D:\test\xmltest\xml_source'  # xml文件存放路径
sv_path = r'D:\test\xmltest\xml_save'  # 修改后的xml文件存放路径
files = os.listdir(path)

for xmlFile in files:
    dom = xml.dom.minidom.parse(os.path.join(path, xmlFile))  # 打开xml文件,送到dom解析
    root = dom.documentElement  # 得到文档元素对象
    names = root.getElementsByTagName('filename')
    a, b = os.path.splitext(xmlFile)  # 分离出文件名a
    for n in names:
        n.firstChild.data = a + '.jpg'
    with open(os.path.join(sv_path, xmlFile), 'w', encoding='utf-8') as fh:
        dom.writexml(fh)

xml文件中的图片名称和已经修改好了。

<?xml version="1.0" ?><annotation>
	<folder>测试图片</folder>
	<filename>000000000000.jpg</filename>
	<path>D:/test/xmltest/JPEGimage/000000000000.jpg</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>800</width>
		<height>800</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>class1</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>631</xmin>
			<ymin>275</ymin>
			<xmax>714</xmax>
			<ymax>509</ymax>
		</bndbox>
	</object>
</annotation>

得到的xml文件会显示版本号,如果直接用xml文件训练可能会报错,所以还需删除<?xml version="1.0" ?>。如果需要删除或者替换其他属性,也可在此修改。

# -*- coding:utf-8 -*-

# 将a替换成b

import os

xmldir = r'D:\test\xmltest\xml_source'
savedir = r'D:\test\xmltest\xml_save'
xmllist = os.listdir(xmldir)
for xml in xmllist:
    if '.xml' in xml:
        fo = open(savedir + '/' + '{}'.format(xml), 'w', encoding='utf-8')
        print('{}'.format(xml))
        fi = open(xmldir + '/' + '{}'.format(xml), 'r', encoding='utf-8')
        content = fi.readlines()
        for line in content:
            # line = line.replace('a', 'b')        # 例:将a替换为b
            line = line.replace('<?xml version="1.0" ?>', '')
            line = line.replace('<folder>测试图片</folder>', '<folder>车辆图片</folder>')
            line = line.replace('<name>class1</name>', '<name>class2</name>')
            fo.write(line)
        fo.close()
        print('替换成功')

# 如通b为空字符串,就是删除

大功告成。