python中使用ElementTree 操作XML
概述
? ? ? 參考elementTree的官方文檔,ET 模塊可以歸納為三個(gè)部分:ElementTree類,Element類以及一些操作 XML 的函數(shù)。??XML是一種固有的分層數(shù)據(jù)格式,表示它的最自然的方式是使用樹。?ET為此目的有兩個(gè)類 -?ElementTree將整個(gè)XML文檔表示為樹,并?Element表示此樹中的單個(gè)節(jié)點(diǎn)。與整個(gè)文檔的交互(讀取和寫入文件)通常在ElementTree關(guān)卡上完成。與單個(gè)XML元素及其子元素的交互在該Element級(jí)別上完成。
XML中結(jié)點(diǎn)結(jié)構(gòu)一般為:<tag attrib>text</tag>的形式
<tag attrib="attrib">text</tag>1.解析XML文件
ET模塊支持從一個(gè)XML文件構(gòu)造成一個(gè)ElementTree對(duì)象,以下以官方文檔中給出的country.xml為例進(jìn)行接收
<?xml version="1.0" encoding="utf-8"?> <data><country1 name="Liechtenstein"><rank>1</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country1><country2 name="中國(guó)"><rank>68</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="趙三" direction="西邊"/><neighbor name="李四" direction="東北"/></country2> </data>使用ET模塊中的parse()函數(shù)構(gòu)造一個(gè)ElementTree對(duì)象,如下所示:
#-*-encoding:utf-8-*-import xml.etree.ElementTree as ET# 獲取 XML 文檔對(duì)象 ElementTree tree = ET.parse('coutry.xml')# 獲取 XML 文檔對(duì)象的根結(jié)點(diǎn) Element root = tree.getroot() # 打印根結(jié)點(diǎn)的名稱 print "tag:",root.tag2.XML中查找結(jié)點(diǎn)信息
XML中可以使用三種方式進(jìn)行查找,分別是find(),findall(),iter()的方式,下面通過(guò)實(shí)例進(jìn)行介紹
1.find()方法和findall()
如果使用Element.findall()或者Element.find()方法,則只會(huì)從結(jié)點(diǎn)的直接子結(jié)點(diǎn)中查找,并不會(huì)遞歸查找。
for country in root.findall('country1'):rank = country.find('rank').textname = country.get('name')print name, rank關(guān)于find()和findall()方法,可以參考一篇竊以為不錯(cuò)的博客。
2.iter()
鑒于find()和findall()的缺點(diǎn),自己較喜歡的使用iter()方法。
import xml.etree.ElementTree as ET# 獲取 XML 文檔對(duì)象 ElementTree tree = ET.parse('coutry.xml')# 獲取 XML 文檔對(duì)象的根結(jié)點(diǎn) Element root = tree.getroot() #使用iter查找并打印結(jié)點(diǎn)信息 for index in root.iter("year2"):print "index.tag",index.tag3.修改更新結(jié)點(diǎn)
結(jié)點(diǎn)的更新涉及到屬性更新,值的更新。如果更新屬性使用,修改Element.attrib進(jìn)行修改;如果更新值使用Element.text更新,注意這里的值的更新,如果是數(shù)字類型,變化的時(shí)候需要需要先轉(zhuǎn)換成int,再轉(zhuǎn)換成str類型進(jìn)行賦值。那更新后一般需要寫入原來(lái)的文件中,此時(shí)需要使用ElementTree.write()方法寫入到XML文件中,如下所示:
#-*- coding:utf-8 -*-import xml.etree.ElementTree as ET# 獲取 XML 文檔對(duì)象 ElementTree tree = ET.parse('coutry.xml')# 獲取 XML 文檔對(duì)象的根結(jié)點(diǎn) Element root = tree.getroot()for index in root.iter("year2"):print "index.text", index.textindex.text = str(int(index.text) + 1)print "index.text", index.texttree.write("countryResult.xml",encoding="UTF-8")?注意:這里編碼格式要使用“UTF-8”,如果使用的是"utf-8"保存后出現(xiàn)沒(méi)有頭部
<?xml version="1.0" encoding="utf-8"?>的情況
總結(jié)
以上是生活随笔為你收集整理的python中使用ElementTree 操作XML的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: collections之defaultd
- 下一篇: python中的encode()和dec