什么是XML?
XML 指可扩展标记语言(eXtensible Markup Language)。 你可以通过本站学习XML教程
XML 被设计用来传输和存储数据。
XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。
它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
python对XML的解析
常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。
python有三种方法解析XML,SAX,DOM,以及ElementTree:
1.SAX (simple API for XML )
python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
2.DOM(Document Object Model)
将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少
例子:
写名为Juexi的xml文件
<?xml version="1.0" encoding="utf-8" ?> <books> <book id="1"> <bname>python入门</bname> <price>20</price> <author>谭*强</author> </book> <book id="2"> <bname>雾都孤儿</bname> <price>50</price> <author>雾都</author> </book> <book id="3"> <bname>西游记</bname> <price>25</price> <author>吴承恩</author> </book> </books>
SAX 解析
from xml.sax import ContentHandler,parse class Book(object): def __init__(self,bname=None,price=None,anthor=None): self.a=bname self.b=price self.c=anthor def __str__(self): return ("书名:{} 价格:{} 作者:{}".format(self.a,self.b,self.c)) BookList=[] class bookSax(ContentHandler): def __init__(self): self.Ber=None self.Tag=None def startDocument(self): pass def startElement(self, name, attrs): self.Tag=name if name=="book": self.Ber=Book() def characters(self, content): if self.Tag == "bname": self.Ber.a=content if self.Tag == "price": self.Ber.b = content if self.Tag == "author": self.Ber.c = content def endElement(self, name): if name=="book": BookList.append(self.Ber) self.Ber=None self.Tag=None def endDocument(self): pass B=bookSax() parse("Juex.xml",B) for i in BookList: print(i)
DOM解析:
from xml.dom.minidom import parse class Book(object): def __init__(self,bname,price,author): self.bname=bname self.price=price self.author=author def __str__(self): return ("书面:{},价格:{},作者:{}".format(self.bname,self.price,self.author)) DOMTree = parse("Juex.xml") coll = DOMTree.documentElement my_book=coll.getElementsByTagName("book") Booklist=[] for i in my_book: b=Book(i.getElementsByTagName("bname")[0].childNodes[0].data,i.getElementsByTagName("price")[0].childNodes[0].data,i.getElementsByTagName("author")[0].childNodes[0].data) Booklist.append(b) for s in Booklist: print(s)
Element Tree解析
from xml.etree.ElementTree import * root=parse("Juex.xml") b=root.findall("book") for i in b: print("书名:{} 价格:{} 作者:{} ".format(i.find("bname").text,i.find("price").text,i.find("author").text))