一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
python中用xml.dom.minidom来解析xml文件,实例如下:
def readXml(xml):
print("read xml file.")
for fileName in os.listdir("Annotations"):
print(fileName)
# 使用minidom解析器打开xml文件
dom = xml.dom.minidom.parse('Annotations/'+fileName)
# 得到文档元素对象
root = dom.documentElement
# 获取图像宽高
get_width = root.getElementsByTagName('width')
width = get_width[0].firstChild.data
get_height = root.getElementsByTagName('height')
height = get_height[0].firstChild.data
# 获取对象
objects = root.getElementsByTagName('object') # 获取所有object标签
ob_num = len(objects) # 图中蝴蝶个数
ob_classes = []
ob_coors = []
for ob in objects:
# 蝴蝶种类
ob_class = ob.getElementsByTagName('name')
ob_classes.append(ob_class[0].firstChild.data)
# ob_classes.append(ob_class[0].ChildNodes[0].data)
# 标记框位置
temp_coor = []
xmin = ob.getElementsByTagName('xmin')
temp_coor.append(xmin[0].firstChild.data)
xmax = ob.getElementsByTagName('xmax')
temp_coor.append(xmax[0].firstChild.data)
ymin = ob.getElementsByTagName('ymin')
temp_coor.append(ymin[0].firstChild.data)
ymax = ob.getElementsByTagName('ymax')
temp_coor.append(ymax[0].firstChild.data)
ob_coors.append(temp_coor)
return width, height, ob_num, ob_classes, ob_coors