1, XML的设计宗旨是传输数据,而非显示数据。
2, 不被定义,需要自定义标签。
3, 以文件形式存储数据,后缀xml。
4, 标准:标签成对出现;区分大小写;标签要正确嵌套;开始部分<?xml version=’1.0’ encoding=’utf-8’?>;只有一个根节点;节点里可以有属性。
5, DTD可以约束xml节点
6,dom解析xml
from xml .dom.minidom import parse
class student: def __init__(self,name,xb,age,chengj): self.name=name self.xb=xb self.age=age self.chengj=chengj def __str__(self): return '姓名:{0} 性别:{1} 年龄:{2} 成绩:{3}'.format(self.name,self.xb,self.age,self.chengj) #得到整个dom文档 doc=parse('scrath') #得到根节点 root=doc.documentElement print(root) students=root.getElementsByTagName('student') lst=[] for p in students: people=student(p.getElementsByTagName('name')[0].childNodes[0].data,p.getElementsByTagName('xb')[0].childNodes[0]. data,p.getElementsByTagName('age')[0].childNodes[0].data,p.getElementsByTagName('chengj')[0].childNodes[0].data) lst.append(people) # print(p.getElementsByTagName('name')[0].childNodes[0].data) # print(p.getElementsByTagName('xb')[0].childNodes[0].data) # print(p.getElementsByTagName('age')[0].childNodes[0].data) # print(p.getElementsByTagName('chengj')[0].childNodes[0].data) for i in lst: print(i)
7,sax解析xml
from xml.sax import ContentHandler from xml.dom.minidom import parse import parser class Book: def __init__(self,bname=None,price=None,author=None): self.bname=bname self.price=price self.author=author def __str__(self): return '书名:{0} 价格:{1} 作者:{2}'.format(self.bname,self.price,self.author) lst=[] class mysaxxml(ContentHandler): def __init__(self,bok=None,tag=None): self.bok=bok self.tag=tag def startDocument(self): print('startDocument') def startElement(self, name, attrs): # 将一开始得到的元素节点名字赋值给tag self.tag=name # 开始时碰见标记book时创建对象并赋值给bok if name=='book': self.bok=Book() print('startElement') def characters(self, content): # tag获取到的标签分别判断,判断后再赋值 if self.tag=='bname': self.bok.bname=content if self.tag=='price': self.bok.bname=content if self.tag=='author': self.bok.bname=content print('characters') def endElement(self, name): # 元素节点结束时如果遇到结尾的book,那么将这个对象添加到这个列表中,对象里面有3个属性值 if name=='book': lst.append(self.bok) self.bok=None # 每判断一次属性就要将tag清空,比如先判断dname后,那么清空后它又能接着放price了 self.tag=None print('endElement') def endDocument(self): print('endDocument') bk=mysaxxml() parse('book',bk) for i in lst: print(i)
8,元素树解析xml
from xml.etree.ElementTree import * class Book: def __init__(self,bname=None,price=None,author=None): self.bname=bname self.price=price self.author=author def __str__(self): return ('书名:{0} 价格:{1} 作者:{2}'.format(self.bname,self.price,self.author)) root=parse('book') shu=root.findall('book') lic=[] for p in shu: mybook=Book() mybook.bname=p.find('bname').text mybook.price=p.find('price').text mybook.author=p.find('author').text lic.append(mybook) for i in lic: print(i)