• 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
  • 相关阅读:
    新人补钙系列教程之:回调函数
    新人补钙系列教程之:卡马克卷轴算法
    新人补钙系列教程之:体验ApplicationDomain 应用程序域
    新人补钙系列教程之:一天一招让你的代码越来越好
    新人补钙系列教程之:AS3 与 PHP 简单通信基础
    新人补钙系列教程之:Molehill底层API中最重要的Context3D
    新人补钙系列教程之:AS 与 JS 相互通信
    新人补钙系列教程之:AS3 位运算符
    新人补钙系列教程之:XML处理方法
    新人补钙系列教程之:网页游戏分线到不分线
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/10718041.html
Copyright © 2020-2023  润新知