#解析一個database的xml文件 """ <databaselist type="database config"> <database> <host>localhost</host> <username>root</username> <password>11111</password> <datasename>wulaoshi</datasename> </database> </databaselist> """ #解析xml文件 domtree=parse('d:\\pylianxi\\data.xml') #獲取根節點 datalist=domtree.documentElement d={} #獲取標簽為database的子節點 database=datalist.getElementsByTagName('database') #database的子節點輪詢,過濾掉textNode節點,取出文本值 for i in database[0].childNodes[1::2]: tag=i.tagName d[tag]=i.childNodes[0].data #childNodes 獲取的是一個列表,通過childNodes[0]獲取具體對象 print('database:',d)
2、手動寫一個xml文件
#寫xml from xml.dom.minidom import * #創建一個文檔對象 doc=Document() #創建一個根節點 root=doc.createElement('managers') #根節點添加屬性 root.setAttribute('company','中體彩') print(root.getAttribute('company')) #根節點加入到tree doc.appendChild(root) #創建二級節點 company=doc.createElement('gloryroad') name=doc.createElement('name') name.appendChild(doc.createTextNode('公司名稱')) #添加文本節點 #創建一個帶着文本節點的子節點 ceo=doc.createElement('ceo') ceo.appendChild(doc.createTextNode('吳總')) #<ceo>吳總</ceo> company.appendChild(name) #name加入到company company.appendChild(ceo) root.appendChild(company)#company加入到根節點 print(ceo.tagName) print(doc.toxml()) #存成xml文件 fp=open('d:\\pylianxi\\test.xml','w',encoding='utf-8') doc.writexml(fp,indent='',addindent='\t',newl='\n',encoding='utf-8') fp.close()
3、通過字典數據 存成xml文件
from xml.dom.minidom import Document #在內存中創建一個空的文檔 doc = Document() #創建一個根節點Managers對象 root = doc.createElement('Managers') #設置根節點的屬性 root.setAttribute('company', '哈哈科技') root.setAttribute('address', '科技軟件園') #將根節點添加到文檔對象中 doc.appendChild(root) managerList = [{'name' : 'joy', 'age' : 27, 'sex' : '女'}, {'name' : 'tom', 'age' : 30, 'sex' : '男'}, {'name' : 'ruby', 'age' : 29, 'sex' : '女'} ] for i in managerList : nodeManager = doc.createElement('Manager') for j in i: nodeName = doc.createElement(j) #給葉子節點name設置一個文本節點,用於顯示文本內容 nodeName.appendChild(doc.createTextNode(str(i[j]))) #將各葉子節點添加到父節點Manager中, nodeManager.appendChild(nodeName) #最后將Manager添加到根節點Managers中 root.appendChild(nodeManager) #開始寫xml文檔 fp = open('d:\\pylianxi\\company11.xml', 'w',encoding='utf-8') doc.writexml(fp, indent='', addindent='\t', newl='\n', encoding="utf-8") fp.close()
4、使用etree的方式解析xml文件
#etree xml from xml.etree import ElementTree as ET
'''
直接解析XML文件並獲得根節點
tree = ET.parse(xmlFilePath)
root = tree.getroot()
解析字符串
root = ET.fromstring(fp.read())
'''
tree=ET.ElementTree(file='d:\\pylianxi\\movies.xml') root=tree.getroot() #打印根節點的標簽及屬性字典 print(root.tag) print(root.attrib) #獲取子節點movie的標簽及屬性字典 for i in root: print (i.tag) print ("********", i.attrib) print ("*"*50) print (root[0].tag) print (root[0].text) #“打印的內容為一個回車” print (root[0][0].tag) #第一個movie節點的第一個子標簽type print (root[0][0].text) print ("*"*50) for i in tree.iter(): #遞歸遍歷所有子元素 print (i.tag, i.attrib,i.text) print ("*"*50) for elem in tree.iterfind('movie/type'):#或者這種方式./movie/type查找movie下一級節點中的所有type標簽,類似xpath查找 print (elem.tag, elem.text) print ("*"*50) print(list(tree.iter(tag='stars'))) for elem in tree.iter(tag='stars'):#在整個樹中查找標簽為stars的元素 print (elem.tag, elem.text) print ("*"*50) for elem in tree.iterfind('*[@title="Ishtar"]'): #或者movie[@title="Ishtar"] 在下一級節點查找屬性為title="Ishtar"的元素 print (elem.tag, elem.attrib) print ("-"*50) root = tree.getroot() #獲取第一級movie元素 print ("root:",root[0].tag ) #打印第一級movie元素的標簽,為movie print ("subnode:",root[0][0].tag) #打印第一級movie元素下的第一個子元素標簽type print ("subnode:",root[0][1].tag ) #打印第一級movie元素下的第二個子元素標簽format print ("subnode:",root[0][2].tag ) #打印第一級movie元素下的第三個子元素標簽year print ("subnode:",root[0][3].tag ) #打印第一級movie元素下的第四個子元素標簽rating print ("subnode:",root[0][4].tag ) del root[0][4] #刪除第一級movie元素下的第五個子元素 del root[0][3] #刪除第一級movie元素下的第四個子元素 del root[0][2] #刪除第一級movie元素下的第三個子元素 del root[0][1] #刪除第一級movie元素下的第二個子元素 del root[3] #刪除第四個movie元素 del root[2] #刪除第三個movie元素 for i in root: print(i.tag,i.attrib) for j in i: print('******',j.tag,j.text) #tree.write("d:\\movies.xml") #將變更的xml文件寫入到文件中
5、etree的方式生成xml
#etree 生成一個xml a = ET.Element('elem') #生成一個節點elem,沒有文本節點 aa = ET.SubElement(a, 'type') #生成一個字節點下的子節點child1 aa.text = "a的type子節點" #在子節點上添加文本節點 aa2 = ET.SubElement(a, 'name') #生成一個字節點下的子節點child2 aa2.text='a的name子節點' b = ET.Element('elem_b') #生成一個節點elem_b,沒有文本節點 b.set('company','科技公司') bb=ET.SubElement(b,'type') bb.text='bb的type子節點' bb2=ET.SubElement(b,'name') bb2.text='bb的name子節點' root = ET.Element('root') #生成一個節點root root.extend((a, b)) #將a、b兩個變量存儲的節點elem和elem1添加到root節點下 tree = ET.ElementTree(root) #生成節點樹 root[0].set('foo', 'bar') #設定第一個子元素的屬性foo,值為bar tree.write("d:\\pylianxi\\test.xml",encoding='utf-8') #將xml文件內容寫入到文本文件中,文件格式並不是很漂亮