欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python使用sax模块解析XML文件示例

程序员文章站 2022-06-30 10:50:21
本文实例讲述了python使用sax模块解析xml文件。分享给大家供大家参考,具体如下: xml样例:

本文实例讲述了python使用sax模块解析xml文件。分享给大家供大家参考,具体如下:

xml样例:

<?xml version="1.0"?>
<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>

sax解析代码展示:

from xml import sax
class moviehandler(sax.contenthandler):
  def __init__(self):
    # 初始化数据,并增加一个当前数据
    self.currentdata = ""
    self.type = ""
    self.format = ""
    self.year = ""
    self.rating = ""
    self.stars = ""
    self.description = ""
  # 文档启动的时候调用
  def startdocument(self):
    print('xml开始解析中...')
  # 元素开始事件处理
  def startelement(self, name, attrs):
    self.currentdata=name
    if self.currentdata=='movie':
      print('*********movie*********')
      title=attrs['title']
      print('title:{0}'.format(title))
  # 内容事件处理
  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
  # 元素结束事件处理
  def endelement(self, name):
    if self.currentdata=='type':
      print('type:{0}'.format(self.type))
    elif self.currentdata=='format':
      print('format:{0}'.format(self.format))
    elif self.currentdata=='year':
      print('year:{0}'.format(self.year))
    elif self.currentdata == 'rating':
      print('rating:{0}'.format(self.rating))
    elif self.currentdata == 'stars':
      print('stars:{0}'.format(self.stars))
    elif self.currentdata == 'description':
      print('description:{0}'.format(self.description))
    self.currentdata = ""
  # 文档结束的时候调用
  def enddocument(self):
    print('xml文档解析结束!')
if __name__=='__main__':
  handler=moviehandler()
  parser = sax.make_parser()
  # parser.setfeature(sax.handler.feature_namespaces, 0)
  parser.setcontenthandler(handler)
  parser.parse("sax_test.xml")

ps:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

在线xml/json互相转换工具:

在线格式化xml/在线压缩xml

xml在线压缩/格式化工具:

xml代码在线格式化美化工具:

更多关于python相关内容感兴趣的读者可查看本站专题:《python操作xml数据技巧总结》、《python数据结构与算法教程》、《python socket编程技巧总结》、《python函数使用技巧总结》、《python字符串操作技巧汇总》、《python入门与进阶经典教程》及《python文件与目录操作技巧汇总

希望本文所述对大家python程序设计有所帮助。