[python]通過ElementTree來操作XML

本文講解如何通過ElementTree來操作XML。

1.引入庫 
需要用到3個類,ElementTree,Element以及建立子類的包裝類SubElement  
from xml.etree.ElementTree import ElementTree 
from xml.etree.ElementTree import Element 
from xml.etree.ElementTree import SubElement as SE

2.讀入並解析 
    tree = ElementTree(file=xmlfile) 
    root = tree.getroot() 
   讀入後,tree是ElementTree的類型,獲取xml根結點使用getroot()方法; 

XML示例文件: 
<item sid='1712' name = '大CC'  > 
<a id=1></a> 
<a id=2></a> 
</item>

3.獲取兒子結點 
查找Element的所有子結點: 
AArry = item.findall('a') 
也可使用getchildren(): 
childs =  item.getchildren() 
     for subItem in childs: 
           print subItem.get('id')

4.插入兒子結點 
方法一: 
    item = Element("item", {'sid' : '1713', 'name' : 'ityouhui'}) 
    root.append(item) 
方法二: 
    SE(root,'item',{'sid':'1713','name':'ityouhui'}) 
法一的好處是插入之後可以對item繼續操作。法二是寫法上簡單,其中SE就是SubElement,在引入處做了聲明;

5.操作屬性 
獲取Element的某個屬性值(eg:獲取item的 name) 
print root.find('item/name').text 
print item.get('name') 
獲取Element所有屬性 
       print item.items()       # [('sid', '1712'), ('name', '大CC')] 
       print item.attrib        # {'sid': '1712', 'name': '大CC'}

6.美化XML 
在寫入之前,傳入root調用此函數,寫入的XML文件格式整齊美觀: 
    indent(root) 
    book.write(xmlfile,'utf-8')

## Get pretty look
def indent( elem, level=0):
    i = "\n" + level*"  "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        for e in elem:
            indent(e, level+1)
        if not e.tail or not e.tail.strip():
            e.tail = i
    if level and (not elem.tail or not elem.tail.strip()):
        elem.tail = i
    return elem
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章