zoukankan      html  css  js  c++  java
  • Python 解析XML实例(xml.sax)

    Python 解析XML实例(xml.sax)

    已知movies.xml

    复制代码
    <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>
       <episodes>4</episodes>
       <rating>PG</rating>
       <stars>10</stars>
       <description>Vash the Stampede!</description>
    </movie>
    <movie title="Ishtar">
       <type>Comedy</type>
       <format>VHS</format>
       <rating>PG</rating>
       <stars>2</stars>
       <description>Viewable boredom</description>
    </movie>
    </collection>
    复制代码

    Python 解析XML实例

    复制代码
    # -*- coding: UTF-8 -*-
     
    import xml.sax
     
    class MovieHandler( xml.sax.ContentHandler ):
       def __init__(self):
          self.CurrentData = ""
          self.type = ""
          self.format = ""
          self.year = ""
          self.rating = ""
          self.stars = ""
          self.description = ""
     
       # 元素开始事件处理
       def startElement(self, tag, attributes):
          self.CurrentData = tag
          if tag == "movie":
             print("*****Movie*****")
             title = attributes["title"]
             print("Title:", title)
     
       # 元素结束事件处理
       def endElement(self, tag):
          if self.CurrentData == "type":
             print ("Type:", self.type)
          elif self.CurrentData == "format":
             print ("Format:", self.format)
          elif self.CurrentData == "year":
             print ("Year:", self.year)
          elif self.CurrentData == "rating":
             print( "Rating:", self.rating)
          elif self.CurrentData == "stars":
             print( "Stars:", self.stars)
          elif self.CurrentData == "description":
             print ("Description:", self.description)
          self.CurrentData = ""
     
       # 内容事件处理
       def characters(self, content):
          if self.CurrentData == "type":
             self.type = content
          elif self.CurrentData == "format":
             self.format = content
          elif self.CurrentData == "year":
             self.year = content
          elif self.CurrentData == "rating":
             self.rating = content
          elif self.CurrentData == "stars":
             self.stars = content
          elif self.CurrentData == "description":
             self.description = content
      
    if ( __name__ == "__main__"):
       
       # 创建一个 XMLReader
       parser = xml.sax.make_parser()
       # turn off namepsaces
       parser.setFeature(xml.sax.handler.feature_namespaces, 0)
     
       # 重写 ContextHandler
       Handler = MovieHandler()
       parser.setContentHandler( Handler )
       
       parser.parse("movies.xml")
    复制代码

    结果:

    复制代码
    *****Movie*****
    Title: Enemy Behind
    Type: War, Thriller
    Format: DVD
    Year: 2003
    Rating: PG
    Stars: 10
    Description: Talk about a US-Japan war
    *****Movie*****
    Title: Transformers
    Type: Anime, Science Fiction
    Format: DVD
    Year: 1989
    Rating: R
    Stars: 8
    Description: A schientific fiction
    *****Movie*****
    Title: Trigun
    Type: Anime, Action
    Format: DVD
    Rating: PG
    Stars: 10
    Description: Vash the Stampede!
    *****Movie*****
    Title: Ishtar
    Type: Comedy
    Format: VHS
    Rating: PG
    Stars: 2
    Description: Viewable boredom
    复制代码
  • 相关阅读:
    MongoDB Shell
    mongo 日记
    java 堆栈 静态
    面向对象(2)
    面向对象(1)
    mongo 学习笔记
    深入浅出学Spring Data JPA
    java记录
    mongodb 2.6 window 安装启动服务
    CF1012F Passports
  • 原文地址:https://www.cnblogs.com/think90/p/11955751.html
Copyright © 2011-2022 走看看