import xml.sax class XmlParser(xml.sax.ContentHandler): def __init__(self): self.type="" self.format="" self.year="" self.rating="" self.stars="" self.description="" # 选取节点 def startElement(self, name, attrs): self.curentData = name if name=="movie": title=attrs["title"] print(title) # 解析节点元素 def endElement(self, name): if self.curentData=="type": print("type:",self.type) if self.curentData=="format": print("format:",self.format) if self.curentData == "year": print("year:", self.year) if self.curentData=="rating": print("rating:",self.rating) if self.curentData=="stars": print("stars:",self.stars) if self.curentData=="description": print("description:",self.description) self.curentData="" # 解析元素内容 def characters(self, content): if self.curentData=="type": self.type=content if self.curentData=="format": self.format=content if self.curentData=="year": self.year=content if self.curentData=="rating": self.rating=content if self.curentData=="stars": self.stars=content if self.curentData=="description": self.description=content if __name__=="__main__": #创建解析器 parser=xml.sax.make_parser() handler=XmlParser()#处理器 parser.setContentHandler(handler)#设置处理器 parser.parse("movies.xml")
#原文档
<?xml version="1.0" encoding="UTF-8"?> <collection shelf="New Arrivals"> <movie title="Enemy Behind"> <type>War, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Talk about a US-Japan war</description> </movie> <movie title="Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>A schientific fiction</description> </movie> <movie title="Trigun"> <type>Anime, Action</type> <format>DVD</format> <year>2001</year> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description> </movie> <movie title="Ishtar"> <type>Comedy</type> <format>VHS</format> <year>2002</year> <rating>PG</rating> <stars>2</stars> <description>Viewable boredom</description> </movie> </collection>