day21 xml模組 ATM+購物車
阿新 • • 發佈:2018-12-11
1. xml模組
<father name="jack"> # 屬性的值必須加雙引號
<son>
標籤的關閉順序,與開啟順序相反,
最先開啟的最後關閉,最後開啟的,最後關閉
</son>
</father> 根標籤只能有一個 JAVA的配置檔案很多用XML格式寫的 HTNL也屬於XML 1.什麼是xml 是可擴充套件的標記語言 標記就是標籤,用標籤來組織資料的語言 也是一種語言,可以用來自定義文件結構 相比json,使用場景更加廣泛,但是語法格式相比jason複雜很多 什麼時候使用json 前後臺需要互動資料時,使用jason 什麼時候使用xml 當需要自定義文件結構時,使用xml 比如java中,經常使用xml檔案來作為配置檔案 作為配置檔案,常見操作就是通過程式去讀取配置資訊 而修改增加刪除,一般是交給使用者來手動完成 # 標籤的叫法,node(節點),element(元素),tag(標籤) #需求:從countrys讀取內容 from xml.etree.ElementTree as ET # 取別名,可以用於簡化書寫 tree = ET.parse('countrys') root = tree.getroot() #獲取根標籤
第一種獲取標籤的方式iter()
全文查詢,在整個樹上都查詢一遍
print(root.iter()) # 獲取迭代器,如果不指定引數,則迭代器迭代的是所有標籤
print(root.iter("country")) # 如果指定引數,則迭代器迭代的是所有名稱匹配的標籤
第二種獲取標籤的方式find()
root.find('country') #在當前標籤下尋找第一個名稱匹配的標籤
root.find('rank') # 在當前標籤下(所有子級標籤),尋找第一個名稱匹配的標籤
第三種獲取標籤的方式 findall()
在當前標籤下(所有子級標籤),查詢所有名稱匹配的標籤
root.findall('rank') # 取不到內容,只找一層內容
1.拿到所有國家標籤
for e in root.iter("country") print(e.tag) 標籤的名稱 print(e.attrib) 標籤的屬性(字典型別) print('e.text') 文字資訊 if e.attrib['name'] == 'Singapore' y = e.find("year") print(y) 在程式中修改文件內容 把所有year標籤的文字加1 for e in root.iter("year") e.text = str(int(e.text) + 1) #做完修改後要將修改後的內容寫入檔案 tree.write("countrys") #把新加坡刪除 for e in root.findall('countrys'): if e.attrib['name'] == 'Singapore': # 刪除時,要通過被刪除的父級標籤來刪除 root.remove(e) tree. write('countrys2') #用程式將中國的資訊寫入文件中 新增時 也需要將要新增的資料做成一個Element標籤 c = ET.Element("country",{"name":"china"}) # 在國家下新增一堆子標籤 rank = ET.Element("rank",{"update":"yes"}) c.append(rank) year = ET.Element("year") year.text = 2018 c.append(year) root.append(c) # 先把要增加的資料寫成xml格式,然後新增,一般不會通過程式增刪改 import xml.etree.ElementTree as ET #建立根標籤 root = ET.Elment('root') root.text('這是一個xml文件') res = ET.dump(root) # 把一個元素和他的子級元素都顯示在stdout上 c = ET.Element('country',{'name':'china'}) root.append(c) tree = ET.ElementTree(root) # 引數:檔名稱,編碼方式,是否需要文件說明 tree.write('new_xml',encoding = 'utf-8',xml_declaraiton = True)
什麼時候應該使用xml格式,前後臺互動不應該使用
當你需要自定義文件結構時(XML最強大的地方就是結構)