怎樣用Python處理XML文件?ElementTree解析

python處理xml方便因內置xml.etree.elementtree模塊,其將xml文檔視為樹結構,每個節點為元素;讀取用et.parse()加載文件并獲取根節點;遍歷通過循環子節點或find()/findall()查找特定節點;修改內容可直接賦值文本并用write()保存更改。

怎樣用Python處理XML文件?ElementTree解析

處理XML文件在python中其實挺方便的,尤其是用標準庫里的xml.etree.ElementTree模塊。它功能夠用、接口清晰,適合大多數常見的XML操作場景。

怎樣用Python處理XML文件?ElementTree解析

什么是ElementTree?

ElementTree是Python內置的一個用于解析和生成XML數據的模塊。它把整個XML文檔看作一棵樹,每個節點對應一個元素(Element),通過遍歷這棵樹來訪問或修改內容。

怎樣用Python處理XML文件?ElementTree解析

比如你有下面這樣的XML結構:

立即學習Python免費學習筆記(深入)”;

<data>     <country name="China">Beijing</country>     <country name="USA">Washington</country> </data>

你可以把它讀進來,然后一層層地找到你需要的數據。

怎樣用Python處理XML文件?ElementTree解析

如何讀取XML文件?

使用ElementTree.parse()方法可以加載一個XML文件。它返回一個樹對象,你可以從這個對象拿到根節點,再往下找其他元素。

import xml.etree.ElementTree as ET  tree = ET.parse('countries.xml') root = tree.getroot()

這時候root就是標簽對應的節點。你可以直接打印它看看類型或者標簽名:

print(root.tag)  # 輸出:data

如果是字符串而不是文件的話,可以用ET.fromstring()函數。

怎么遍歷XML節點?

拿到根節點之后,最常見的做法是循環遍歷它的子節點:

for child in root:     print(child.tag, child.attrib)

上面這段代碼會輸出:

country {'name': 'China'} country {'name': 'USA'}

如果你想更靈活地查找特定節點,可以用find()或findall()方法:

  • find() 返回第一個匹配的子節點
  • findall() 返回所有匹配的子節點列表

例如:

china = root.find(".//country[@name='China']") print(china.text)  # 輸出:Beijing

XPath語法在這里很實用,像.//country[@name=’China’]這種寫法能快速定位目標節點。

修改和保存XML內容怎么做?

有時候你不僅想讀,還想改內容甚至新增節點。

比如修改某個節點的文本內容:

usa = root.find(".//country[@name='USA']") usa.text = "DC"

也可以添加新節點:

new_country = ET.SubElement(root, 'country', name='Japan') new_country.text = 'Tokyo'

最后別忘了保存改動:

tree.write('countries.xml')

這樣就能把修改后的結構寫回原文件了。

不過要注意的是,寫入時默認不會自動格式化縮進。如果你希望結果好看點,可以在寫入前手動加一些換行和tab字符,或者用第三方工具美化輸出。

基本上就這些。用ElementTree處理XML不算難,但有些細節容易忽略,比如屬性要用字典方式訪問,路徑查找要記得語法格式等。熟練之后你會發現它非常順手。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享