Python3使用SAX解析XML详解与示例

木白
木白
发布时间:2026-10-13 | 6人浏览过
原创

本文介绍Python3中基于SAX(Simple API for XML)解析XML文档的方法。SAX采用事件驱动机制,包含解析器和事件处理器两部分,适用于大型文件或需提取特定信息的场景。文章通过具体代码示例演示如何继承[[wp:a3]]类并实现[[wp:a1]]函数,解析movies.xml文件并输出电影信息。

本文通过具体实例,详细讲解Python3环境下利用SAX库解析XML文件的操作流程,供读者参考学习。

Python中使用SAX解析XML的技术要点

SAX(Simple API for XML)是一种基于事件驱动的API接口。

使用SAX解析XML文档主要涉及两个核心组件:解析器和事件处理器。

解析器的职责是读取XML文档内容,并向事件处理器发送相应的事件通知,例如元素开始和元素结束等信号。

事件处理器则负责接收这些事件,并对传递过来的XML数据进行相应的处理逻辑。

SAX解析方式主要适用于以下场景: 1、处理体积庞大的XML文件; 2、仅需获取文件中部分数据,或只需提取特定字段信息; 3、需要构建自定义的对象模型时。

在Python中采用SAX方式处理XML,首先需要引入xml.sax模块中的parse函数,同时还需要使用xml.sax.handler模块中的ContentHandler类。

示例代码文件:saxDemo.py

# -*- coding:utf-8 -*-
#!/usr/bin/python3
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: love中国 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

具体运行结果如下图所示

待解析的movies.xml文件内容如下

<?xml version="1.0" encoding="utf-8"?>
<collection shelf="New Arrivals">
<movie title="Enemy Behind">
  <type>love中国</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>
</collection>

此外,推荐以下在线XML操作工具供参考使用

在线XML与JSON格式互转工具: http://tools.jb51.net/code/xmljson

在线XML格式化与压缩工具: http://tools.jb51.net/code/xmlformat

XML在线压缩及格式化工具: http://tools.jb51.net/code/xml_format_compress

XML代码在线格式化与美化工具: http://tools.jb51.net/code/xmlcodeformat

若读者对Python处理XML数据感兴趣,可进一步查阅本站相关专题:《Python操作xml数据技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》以及《Python文件与目录操作技巧汇总》。

希望上述内容能对各位Python程序开发者有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表