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