xml的解析和对xml节点里面的值的修改

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文件:

                     #object是元素,有属性
    guohui      # name 为object子元素
    Unspecified
    0
    0
                   # bndbox 为object子元素     
      885       # xmin 为bndbox子元素
      429
      907
      457
    
  
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)


你可能感兴趣的:(xml的解析和对xml节点里面的值的修改)