之前在使用xml解析的时候,在网上搜了很多教程,最终没有能按照网上的教程实现需求。

所以呢,只好自己去看源码,在sax的__init__.py下看到这么一段代码:

  1. 1 def parse(source, handler, errorHandler=ErrorHandler()):
  2. 2 parser = make_parser()
  3. 3 parser.setContentHandler(handler)
  4. 4 parser.setErrorHandler(errorHandler)
  5. 5 parser.parse(source)
  6. # 可以看出来,执行xml解析至少需要两个参数:source:源文件路径和实例化的handler对象

下面我们就用一个例子来是实现一下:(事先说明,这个例子是网上找的,不是自己写的)

  1. <bookstore>
  2. <book category="CHILDREN">
  3. <title>Harry Potter</title>
  4. <author>J K. Rowling</author>
  5. <year>2005</year>
  6. <price>29.99</price>
  7. </book>
  8. <book category="WEB">
  9. <title>Learning XML</title>
  10. <author>Erik T. Ray</author>
  11. <year>2003</year>
  12. <price>39.95</price>
  13. </book>
  14. </bookstore>

下面将对各个步骤的作用逐个说明:

  1. #!usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # @Time : 2018/5/30 22:43
  4. # @Author : Adong_Chen
  5.  
  6. from xml import sax
  7.  
  8. class TestHandler(sax.ContentHandler): # 定义自己的handler类,继承sax.ContentHandler
  9. def __init__(self):
  10. sax.ContentHandler.__init__(self) # 弗父类和子类都需要初始化(做一些变量的赋值操作等)
  11. self._content = ""
  12. self._tag = ""
  13.  
  14. def startElement(self, name, attrs): # 遇到<tag>标签时候会执行的方法,这里的name,attrs不用自己传值的(这里其实是重写)
  15. self._tag = name
  16. if name == "bookstore":
  17. print "=========BOOKSTORE========="
  18. if self._tag == "book":
  19. print "BOOK: " + attrs["category"]
  20. print "--------------------------"
  21.  
  22. def endElement(self, name):              # 遇到</tag>执行的方法,name不用自己传值(重写)
  23. # print "endElement"
  24. if name == "bookstore":
  25. print "=========BOOKSTORE========="
  26. elif name == "title":
  27. print "Title: " + self._content
  28. elif name == "author":
  29. print "Author: " + self._content
  30. elif name == "year":
  31. print "Year: " + self._content
  32. elif name == "price":
  33. print "Price: " + self._content
  34. else:
  35. pass
  36.  
  37. def characters(self, content): # 获取标签内容
  38. self._content = content
  39.  
  40. if __name__ == "__main__":
  41. handler = TestHandler() # 自定义类实例化成对象
  42. sax.parse("Test2.xml", handler) # 解析xml文件

  

执行结果如下:

  1. =========BOOKSTORE=========
  2. BOOK: CHILDREN
  3. --------------------------
  4. Title: Harry Potter
  5. Author: J K. Rowling
  6. Year: 2005
  7. Price: 29.99
  8. BOOK: WEB
  9. --------------------------
  10. Title: Learning XML
  11. Author: Erik T. Ray
  12. Year: 2003
  13. Price: 39.95
  14. =========BOOKSTORE=========

python使用sax实现xml解析的更多相关文章

  1. Python的html和xml解析库Beautiful Soup

    网站:http://www.crummy.com/software/BeautifulSoup/ 版权声明:本文博主原创文章,博客,未经同意不得转载.

  2. xml解析(4)

    本节要点: DOM解析方式 SAX解析方式 DOM4J对XML的解析 XML用于将数据组织起来,形成文档用于存储和传输: 更多时候我们需要的是将xml中的数据解析出来,甚至是在程序中动态生成xml. ...

  3. python使用SAX解析xml

    python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件 在python中使用sax方式处理xml要先引入xml.s ...

  4. Python XML解析(转载)

    Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...

  5. Xml解析之——Java/Android/Python

    Xml解析之——Java/Android/Python 一.Xml文件 test.xml <note> <to>George</to> <from>Jo ...

  6. Python XML解析之ElementTree

    参考网址: http://www.runoob.com/python/python-xml.html https://docs.python.org/2/library/xml.etree.eleme ...

  7. python大法好——Python XML解析

    Python XML解析 什么是XML? XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识. 它也是元标记语言,即定义了用于定义其他与 ...

  8. 【Python】xml 解析

    1. XML:指可扩展标记语言,是一种标记语言,用于存储数据和传输数据,但没有像HTML那样具有预定义标签,需要程序猿自定义标签 2. XML的解析:读取XML数据结构中的某些信息,比如读取书的属性 ...

  9. python 之模块之 xml.dom.minidom解析xml

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...

随机推荐

  1. 全网最详细的一个超级好用的命令行工具【Cmder】的安装之后的一些配置(图文详解)

    不多说,直接上干货! 1.修改命令提示符λ为$ 首先,我们看到 进入解压后的cmder的目录,进入vendor,打开init.bat文件. 修改第15行的代码 @prompt $E[;;40m$P$S ...

  2. 【Android基础】Fragment 详解之Fragment生命周期

    上一篇文章简单介绍了一下Fragment,这一篇文章会详细的说一下Fragment的生命周期和创建一个用户界面. Fragment的主要功能就是创建一个View,并且有一个生命周期来管理这个View的 ...

  3. HashMap源码之常用方法--JDK1.8

    常用方法 hash(key) static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCo ...

  4. java --Integer 学习

    本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 在网上看到一个面试题,没有完全做, 本代码基于JDK8 //下面代码运行结果是 public class ...

  5. nginx部署django应用

    Django部署方式有很多种,之前写过一篇部署在Apache上的博文:https://www.cnblogs.com/shenh/p/7552722.html .下文介绍的是通过Nginx来部署. N ...

  6. vue中使用refs定位dom出现undefined?

    之前在公司做项目,一直感觉用ref来定位dom节点挺方便的.但是期间遇到了一个问题,就是在mounted(){}钩子里面使用this.$refs.xxx,打印出来的却是undefined? 于是我就对 ...

  7. C#程序实现软件开机自动启动的两种常用方法

    C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法函数的示例与实例带详细注释 方法一:将软件的快捷方式创建到计算机的自动启动目录下(不需要管理员权限) 1.必要引用 ...

  8. C#中saveFileDialog(另存为)保存图片文件

    弹出另存为提示框保存图片文件: //用户自由选择指定路径保存文件            SaveFileDialog savedialog = new SaveFileDialog();        ...

  9. Elasticsearch系列(1):认识Elasticsearch

    官方定义 Elasticsearch 是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据. 它被用作全文检索.结构化搜索.分析以及这三个功能的组合. Elasti ...

  10. 微信小程序性能优化技巧

    摘要: 如果小程序不够快,还要它干嘛? 原文:微信小程序性能优化方案--让你的小程序如此丝滑 作者:杜俊成要好好学习 Fundebug经授权转载,版权归原作者所有. 微信小程序如果想要优化性能,有关键 ...