📅  最后修改于: 2023-12-03 15:05:02.060000             🧑  作者: Mango
SAX(Simple API for XML)是一种解析XML数据的API,它可以解析XML文件,并将其逐个元素地读入内存,避免了将整个XML文件读入内存的缺点。SAX解析器逐个元素的解析XML文档,当解析器遇到XML文档的开始和结束标记时,它会触发相应的事件,常用的事件包括开始元素事件、结束元素事件和字符数据事件等。
SAX解析器的优点在于它占用的内存较少,可以处理较大的XML文件,而且在解析文件时速度较快。然而,它也存在一些限制,比如SAX解析器只允许顺序读取XML文档,而不支持随机读取。此外,SAX解析器也不支持XPath等高级的XML查询。
下面是使用SAX解析器读取XML文件的步骤:
示例代码如下:
import xml.sax
class MyHandler(xml.sax.ContentHandler):
def __init__(self):
self.CurrentData = ""
self.name = ""
self.age = ""
# 元素开始事件
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag == "student":
print("*****Student*****")
roll_no = attributes["rollno"]
print("Roll No.:", roll_no)
# 元素结束事件
def endElement(self, tag):
if self.CurrentData == "name":
print("Name:", self.name)
elif self.CurrentData == "age":
print("Age:", self.age)
self.CurrentData = ""
# 字符数据事件
def characters(self, content):
if self.CurrentData == "name":
self.name = content
elif self.CurrentData == "age":
self.age = content
if __name__ == "__main__":
# 创建SAXParser实例
parser = xml.sax.make_parser()
# 关闭命名空间支持
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
# 重写ContentHandler
handler = MyHandler()
parser.setContentHandler(handler)
# 解析XML文件
parser.parse("students.xml")