Sax 解析器
代码
#!/usr/bin/env Python3
# -*- coding: utf-8 -*-
# @Software: PyCharm
# @virtualenv:workon
# @contact: contact information
# @Desc:xml的Sax解析器
__age__ = '未昔/AngelFate'
__date__ = '2019/8/22 20:14'
from xml.sax import parse, ContentHandler #引入继承包ContentHandler
# SAX (simple API for XML )
# python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
#学生的类
class Student:
#定义初始化属性,和xml文件属性相同
def __init__(self,studentname=None,age=None,class_=None):
self.studentname=studentname # 姓名
self.age=age # 年龄
self.class_=class_ # 班级
def __str__(self): #转化为字符串输出
return self.studentname+","+self.age+","+self.class_
students=[]#定义一个书的数组,用来存放每次得到的数据
#定义继承ContentHandler的类,可以实现相应的方法
class STdemo(ContentHandler):
def __init__(self):
#定义全局变量
self.student=None #用来接收student的相应数据
self.tag=None #用来接收characters方法得到的content内容
def startDocument(self): #students 对象开始
print("对象开始")
def endDocument(self): #students 对象结束
print("对象结束")
def startElement(self, name, attrs): #每一个标签元素的开始,name:标签名称 attrs:标签内部相应属性
if name=='student': #如果标签名是 studentname
self.student=Student() #创建一个Book()对象
def endElement(self, name): #每一个标签元素的结束,name:标签名称 (此时才会得到相应的content)
if name=='studentname':
self.student.studentname=self.tag #对象的标签名=得到相应content的值
if name=='age':
self.student.age=self.tag
if name=='class':
self.student.class_=self.tag
if name=='student':
students.append(self.student) #为定义的数组追加得到的相应元素
def characters(self, content):
self.tag=content #写了self的,就可以定义为全局变量
parse("E:\python\Study\小经验\data\student.xml",STdemo()) #parse的方法,分别指明xml文件,并调用查找的类方法
for i in students: #对数组books[]循环
print(i)
结果
D:\import\python3.7\python.exe E:/python/Study/小经验/python对XML的解析/python对XML的解析-Sax解析器.py
对象开始
对象结束
张三,18,信管171
王洋,19,软件178
天天,21,网络177
Process finished with exit code 0