python處理xml方便因內置xml.etree.elementtree模塊,其將xml文檔視為樹結構,每個節點為元素;讀取用et.parse()加載文件并獲取根節點;遍歷通過循環子節點或find()/findall()查找特定節點;修改內容可直接賦值文本并用write()保存更改。
處理XML文件在python中其實挺方便的,尤其是用標準庫里的xml.etree.ElementTree模塊。它功能夠用、接口清晰,適合大多數常見的XML操作場景。
什么是ElementTree?
ElementTree是Python內置的一個用于解析和生成XML數據的模塊。它把整個XML文檔看作一棵樹,每個節點對應一個元素(Element),通過遍歷這棵樹來訪問或修改內容。
比如你有下面這樣的XML結構:
立即學習“Python免費學習筆記(深入)”;
<data> <country name="China">Beijing</country> <country name="USA">Washington</country> </data>
你可以把它讀進來,然后一層層地找到你需要的數據。
如何讀取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不算難,但有些細節容易忽略,比如屬性要用字典方式訪問,路徑查找要記得語法格式等。熟練之后你會發現它非常順手。