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>                     #object是元素,有屬性
    <name>guohui</name>      # name 爲object子元素
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>               # bndbox 爲object子元素     
      <xmin>885</xmin>       # xmin 爲bndbox子元素
      <ymin>429</ymin>
      <xmax>907</xmax>
      <ymax>457</ymax>
    </bndbox>
  </object>
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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章