XML,可擴展標記語言,用來傳輸和存儲數據。
xml的文件格式:
<?xml version="1.0" encoding="utf-8"?>
<userdata createuser="false">userdata內容
<dataconnection>
<server>localhost</server>
<uid>sa</uid>
<pwd></pwd>
</dataconnection>
<net>
<name>jiayuan</name>
</net>
</userdata>
xml中節點Element類的函數
1 tag 當前節點標簽名 2 attrib 當前節點屬性 3 text 當前節點內容 4 append 添加一個子節點 5 clear 清空節點 6 extend 為當前節點添加 n 個子節點 7 find 獲取第一個尋找到的子節點 8 findall 獲取所有的子節點 9 findtext 獲取第一個尋找到的子節點的內容 10 get 獲取當前節點的屬性 11 insert 在當前節點創建子節點,然后插入指定位置 12 items 獲取當前節點的所有屬性,和字典中的items一樣,內容都是健值對 13 iter 在根據節點名稱尋找所有指定的節點,並返回一個迭代器 14 iterfind 獲取所有指定的節點,並放在一個迭代器中 15 itertext 在子孫中根據節點名稱尋找所有指定的節點的內容,並返回一個迭代器 16 keys 獲取當前節點的所有屬性的 key 17 makeelement 創建一個新節點 18 remove 刪除某個節點 19 set 設置當前節點屬性
xml解析
1.ElementTree.XML(str)函數

1 from xml.etree import ElementTree as ET 2 3 with open("data.xml",'r') as file: 4 #將xml文檔中內容讀取到strXml中 5 strXml =file.read() 6 #XML將字符串解析成xml特殊對象,返回xml.etree.ElementTree.Element對象,這個是根節點 7 root=ET.XML(strXml) 8 print(type(root))
2.ElementTree.parse("file_path")函數

1 #打開xml文件並且解析,返回一個xml.etree.ElementTree.ElementTree對象 2 tree=ET.parse("data.xml") 3 #獲取xml的根節點 4 root=tree.getroot() 5 6 print(root.tag)
遍歷指定的節點

1 with open("data.xml",'r',encoding="utf-8") as file: 2 #將xml文檔中內容讀取到strXml中 3 strXml =file.read() 4 #XML將字符串解析成xml特殊對象,返回xml.etree.ElementTree.Element對象,這個是根節點 5 root=ET.XML(strXml) 6 for value in root.iter("uid"): 7 print(value.tag,value.text)
修改節點的內容並保存

1 with open("data.xml",'r',encoding="utf-8") as file: 2 #將xml文檔中內容讀取到strXml中 3 strXml =file.read() 4 #XML將字符串解析成xml特殊對象,返回xml.etree.ElementTree.Element對象,這個是根節點 5 root=ET.XML(strXml) 6 node=root.find("dataconnection") 7 print(node) 8 node.set("name","hello,xml") 9 #利用ET.XML這種方法打開XML的話不能直接保存,需要借助ET.ElementTree 10 #如果使用的ET.parse(filePath)打開的話,就不需要額外的創建一個ElementTree對象 11 tree=ET.ElementTree(root) 12 tree.write("data.xml",encoding="utf-8")

1 with open("data.xml",'r',encoding="utf-8") as file: 2 #將xml文檔中內容讀取到strXml中 3 strXml =file.read() 4 #XML將字符串解析成xml特殊對象,返回xml.etree.ElementTree.Element對象,這個是根節點 5 root=ET.XML(strXml) 6 node=root.find("dataconnection") 7 root.remove(node) 8 #利用ET.XML這種方法打開XML的話不能直接保存,需要借助ET.ElementTree 9 #如果使用的ET.parse(filePath)打開的話,就不需要額外的創建一個ElementTree對象 10 tree=ET.ElementTree(root) 11 tree.write("data.xml",encoding="utf-8")
創建XML文檔

1 from xml.etree import ElementTree as ET 2 #創建根節點 3 root=ET.Element("home",{"name":"root"}) 4 5 #創建子節點,也可以用下面的方式創建,但只是創建,還沒有加到任何節點下面 6 #sub=root.makeelement("son",{"sonName":"haha"}),下面同樣可以 7 sub=ET.Element("son",{"sonName":"haha"}) 8 9 subsub=ET.Element("subson",{"subsonName":"xixi"}) 10 11 root.append(sub) 12 13 sub.append(subsub) 14 tree=ET.ElementTree(root) 15 tree.write("createXml.xml") 16 17 ###########結果(實際上是沒有縮進的)############ 18 <home name="root"> 19 <son sonName="haha"> 20 <subson subsonName="xixi" /> 21 </son> 22 </home>

1 from xml.etree import ElementTree as ET 2 3 root=ET.Element("home",{"name":"root"}) 4 #創建節點並添加到第一個參數的節點下面 5 sub=ET.SubElement(root,"son",{"subName":"haha"}) 6 7 subsub=ET.SubElement(sub,"son",{"subName":"haha"}) 8 9 tree=ET.ElementTree(root) 10 tree.write("createXml2.xml") 11 12 #########結果(結果實際上沒有縮進)########### 13 <home name="root"> 14 <son subName="haha"> 15 <son subName="haha" /> 16 </son> 17 </home>
增加縮進

1 from xml.etree import ElementTree as ET 2 from xml.dom import minidom 3 4 def prettify(elem): 5 """ 6 將節點轉換成字符串,並添加縮進 7 """ 8 #返回該對象的字符串表示 9 rough_string = ET.tostring(elem, 'utf-8') 10 print(type(rough_string)) 11 #從xml字符串得到dom對象 12 reparsed = minidom.parseString(rough_string) 13 print(type(reparsed)) 14 return reparsed.toprettyxml(indent="\t") 15 16 root=ET.Element("home",{"name":"root"}) 17 #創建節點並添加到第一個參數的節點下面 18 sub=ET.SubElement(root,"son",{"subName":"haha"}) 19 20 subsub=ET.SubElement(sub,"son",{"subName":"haha"}) 21 22 newStr=prettify(root) 23 24 file=open("createXml3.xml","w",encoding="utf-8") 25 file.write(newStr) 26 file.close()
命名空間的使用

1 from xml.etree import ElementTree as ET 2 #注冊命名空間 3 ET.register_namespace("baidu","http://baidu.com") 4 5 root=ET.Element("{http://baidu.com}home",{"name":"root"}) 6 #創建節點並添加到第一個參數的節點下面 7 sub=ET.SubElement(root,"{http://baidu.com}son",{"{http://baidu.com}subName":"haha"}) 8 9 subsub=ET.SubElement(sub,"{http://baidu.com}son",{"{http://baidu.com}subName":"xixi"}) 10 11 tree=ET.ElementTree(root) 12 tree.write("createXml4.xml") 13 14 ###########結果(實際中沒有縮進)############## 15 <baidu:home xmlns:baidu="http://baidu.com" name="root"> 16 <baidu:son baidu:subName="haha"> 17 <baidu:son baidu:subName="xixi" /> 18 </baidu:son> 19 </baidu:home>