首頁  >  文章  >  後端開發  >  python解析XML檔實例(圖)

python解析XML檔實例(圖)

PHPz
PHPz原創
2017-04-23 16:44:513282瀏覽

如下使用xml.etree.ElementTree模組來解析XML檔。 ElementTree模組中提供了兩個類別用來完成這個目的:

  • #ElementTree 表示整個XML檔案(一個樹形結構)

  • Element 表示樹中的一個元素(結點)

我們操作如下XML檔: migapp.xml

#我們操作如下XML檔:python解析XML檔實例(圖) migapp.xml

我們可以透過以下方式導入ElementTree模組:  import xml.etree.ElementTree as ET

或也可以只導入parse解析器:  from xml.etree.ElementTree import parse

首先需要打開一個xml文件,本地文件使用open函數,如果是互聯網文件,則使用urlopen:

f = open( ' migapp.xml ' , ' rt ' , encoding= ' utf -8 ' )

然後對XML進行解析。 1 解析XML檔

1.1 python解析XML檔實例(圖)解析根元素

tree = ET.parse(f)
root = tree.getroot()
print('root.tag =', root.tag)
print('root.attrib =', root.attrib)

1.2 python解析XML檔實例(圖)解析根的兒子

for child in root:      # 仅可以解析出root的儿子,不能解析出root的子孙
    print(child.tag)
    print(child.attrib) # attrib is a dict

1.3 python解析XML檔實例(圖)透過索引解析根的子孫

print(root[1][1].tag)
print(root[1][1].text)

1.4 python解析XML檔實例(圖)迭代解析出所有的指定element

for element in root.iter('environment'):
    print(element.attrib)

#1.5 python解析XML檔實例(圖)幾個有用的方法

# element.findall()解析出指定element的所有儿子
# element.find()解析出指定element的第一个儿子
# element.get()解析出指定element的属性attrib
for environment in root.findall('environment'):
    first_variable = environment.find('variable')
    print(first_variable.get('name'))

#2 修改XML檔假設我們需要為每個text元素新增一個屬性size="50",修改其text為"Benxin Tuzi",新增一個子元素date="2016 /01/16"

for text in root.iter('text'):
    text.set('size', '50')
    text.text = 'Benxin Tuzi'
    text.append(ET.Element('date', attrib={}, text='2016/01/16'))
tree.write('output.xml')

python解析XML檔實例(圖)migapp.xml

 中的部分:

##output.xmlpython解析XML檔實例(圖)  中對應的部分:

  • 3 說明事項

#不要使用xml.py作為檔案名,否則此時會發生如下錯誤:

ImportError: No module named 'xml.etree'; 'xml' is not a package

分析:

這是由於import時會先在目前路徑下尋找,此時發現存在xml.py模組,而我們自己寫的xml.py當然不是一個package

注意:

刪除xml.py後仍然不能成功解釋,那是因為當前路徑中也產生了xml.pyc,而該檔案的優先權要高於xml.py,因此解譯器還是優先在xml.pyc中尋找,因此必須將該檔案也刪除掉,成功解決問題。

結論:
  • 檔案名稱盡量不要與套件名稱或模組名稱同名,即使你在腳本中不使用該模組或套件,否則可能發生奇怪的錯誤。

ElementTree模組中提供的許多解析函數都需要預先將整個XML文件讀入記憶體中,這對於大型XML解析而言,不是一件好事,尤其是當我們從網路、管道中讀取XML時,非阻塞式的解析非常重要。此時,我們可以使用ElementTree模組中的XMLPullParse類別來處理。當然我們也可以選擇ElementTree模組的iterparse()來代替,該方法在解析大型XML時也不需要全部讀入記憶體。 ##########

以上是python解析XML檔實例(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn