python通過ElementTree操作XML擷取結點讀取屬性美化XML

來源:互聯網
上載者:User
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樣本檔案:

代碼如下:






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

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.