#解析一个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文件内容写入到文本文件中,文件格式并不是很漂亮