1. 寫xml
from xml.etree.ElementTree import Element, SubElement, ElementTree
# 生成根節點
root =Element('root')
# 生成第一個子節點 head
head =SubElement(root, 'head')
# head 節點的子節點
title =SubElement(head, 'title')
title.text = 'Well Dola!'
# 生成 root 的第二個子節點 body
body =SubElement(root, 'body')
# body 的内容
body.text = 'I love Dola!'
tree =ElementTree(root)
這樣就得到了一個 xml 樹的對象 tree 以及它的根節點的對象 root
接着我們把它們變成 xml 串,有兩個辦法,一個是用 tree 對象的 write 方法将 xml 内容寫成一個檔案,還有一個是用 etree 的 tostring 方法轉成 xml 字元串:
1 2 3 4 5 | |
但是第二種有一個問題,就是它沒有
1 | |
這個頭部定義内容:
1 | |
怎麼辦呢?
有一個辦法是使用 minidom 來實作,方法如下:
1 2 3 4 5 | |
雖然讓計算機多運作了一些代碼,但是這樣可以把問題解決掉。
最後生成的 xml 代碼如下:
1 | |
2. 讀xml
ElementTree在Python标準庫中有兩種實作:一種是純Python實作的,如xml.etree.ElementTree,另一種是速度快一點的xml.etree.cElementTree。注意:盡量使用C語言實作的那種,因為它速度更快,而且消耗的記憶體更少。
1)調用parse()方法,傳回解析樹
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
tree = ET.parse("country.xml") # <class 'xml.etree.ElementTree.ElementTree'>
root = tree.getroot() # 擷取根節點 <Element 'data' at 0x02BF6A80>
2)調用from_string(),傳回解析樹的根元素
import xml.etree.ElementTree as ET
data = open("country.xml").read()
root = ET.fromstring(data) # <Element 'data' at 0x036168A0>
3)調用ElementTree類ElementTree(self, element=None, file=None) # 這裡的element作為根節點
import xml.etree.ElementTree as ET
tree = ET.ElementTree(file="country.xml") # <xml.etree.ElementTree.ElementTree object at 0x03031390>
root = tree.getroot() # <Element 'data' at 0x030EA600>
解析過程:
導入ElementTree,
import xml.etree.ElementTree as ET
解析Xml檔案找到根節點:直接解析XML檔案并獲得根節點,
tree = ET.parse('country_data.xml') root = tree.getroot()
解析字元串,
root = ET.fromstring(country_data_as_string)
周遊根節點可以獲得子節點,然後就可以根據需求拿到需要的字段了。
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
import sys,os
擷取檔案的根結點
tree = ET.parse(filename.xml)
root = tree.getroot()
擷取所有為object的元素
root.findall('object')
擷取object中為item的元素
ojbect.find('item')
讀取item元素裡面的内容
print item.text
擷取屬性值
print item.get['src'] 或 item['src']
主要方法:
- Element.text=value可以直接修改其text屬性。
- Element.tail=value可以直接修改其tail屬性。
- Element.set(key, vlaue)可以添加新的attrib。
- Element.append(subelement)可以添加新的子元素。
- Element.extend(subelements)添加子元素的清單(參數類型是序列)。
- Element.remove(subelement)可以删除子元素
參考:
https://www.cnblogs.com/zqchen/articles/3936805.html
https://www.cnblogs.com/hupeng1234/p/7262371.html
https://blog.csdn.net/a464057216/article/details/54915241
https://blog.csdn.net/q_l_s/article/details/71629804