xml的解析和修改:
xml的解析就是对xml节点的值的读取.网上有三种读取方式,我采用xml.dom.minidom和xml.etree.cElementTree,现在对于两者的区别不是很了了解.https://www.jb51.net/article/63780.htm这篇文章写的还是相对详细,但是也是主要说明使用方法. http://www.w3school.com.cn/x.asp这个网站有xml的详细介绍.
1.使用xml.dom.minidom解析和修改xml文件:
xml文件:
def ReadXml(xmlfile):
dom = xml.dom.minidom.parse(xmlfile) #打开xml文档
root = dom.documentElement #得到xml文档对象
tree = ET.parse(xmlfile)
name =root.getElementsByTagName('name')
xmin =root.getElementsByTagName('xmin')
ymin =root.getElementsByTagName('ymin')
xmax =root.getElementsByTagName('xmax')
ymax =root.getElementsByTagName('ymax')
x1 = y1 = 10000
x2 = y2 = 0 #读取xmin的数据
for i in range(len(name)):
if int(xmin[i].firstChild.data) <= x1:
x1 = int(xmin[i].firstChild.data)
if int(ymin[i].firstChild.data) <= y1:
y1 = int(ymin[i].firstChild.data)
if int(xmax[i].firstChild.data) >= x2:
x2 = int(xmax[i].firstChild.data)
if int(ymax[i].firstChild.data) >= y2:
y2 = int(ymax[i].firstChild.data)
results = [x1-30, y1-30, x2+30, y2+30]
return results, tree
2.使用xml.etree.cElementTree解析和修改xml文件:
def read_xml(xmlname):
tree = ET.parse(xmlname)
root = tree.getroot()
return tree,root
def modify(xmlfile):
tree, root = read_xml(xmlfile)
objs = tree.findall('object')
for obj in objs:
bbox = obj.find('bndbox')
if int(bbox.find('xmin').text) >= int(bbox.find('xmax').text):
bbox.find('xmin').text,bbox.find('xmax').text = bbox.find('xmax').text,bbox.find('xmin').text
print 'modify x'
if int(bbox.find('ymin').text) >= int(bbox.find('ymax').text):
bbox.find('ymin').text,bbox.find('ymax').text = bbox.find('ymax').text,bbox.find('ymin').text
print 'modify y'
write_xml(tree,xmlfile)