Python中xml文件处理
xml 比 json 复杂,在 web 中的应用越来越少,有些地方也会用到,我们有必要了解一下 xml。解析 xml 有两种方法:dom 和 sax。dom 会把整个 xml 读入内存,因此占用内存大,解析慢;sax 是流模式,边读边解析,占用内存小,解析快。我们本节就学习如何用 sax 来解析 xml。
使用 sax 解析器解析 xml
我们使用 sax 解析 xml 文件,我们只需要写一个类继承 sax 模块的 ContentHandler 类即可,我们可以通过重写父类的函数,定制自己的方案。
ContentHandler 类即可,我们可以通过重写父类的函数,定制自己的方案。
from xml import sax
class MyHandler(sax.ContentHandler): # 定义自己的 handler 类,继承 sax.ContentHandler
def __init__(self):
sax.ContentHandler.__init__(self) # 父类和子类都需要初始化(做一些变量的赋值操作等)
self._content = ""
self._tag = ""
def startElement(self, name, attrs): # 遇到 <tag> 标签时候会执行的方法,这里的 name,attrs 不用自己传值的(这里其实是重写)
self._tag = name
if name == "birdpython":
print("=========birdpython.com=========")
if self._tag == "book":
print("BOOK: " + attrs["category"])
print("--------------------------")
def endElement(self, name): # 遇到</tag>执行的方法,name 不用自己传值(重写)
if name == "birdpython":
print("=========birdpython.com=========")
elif name == "title":
print("Title: " + self._content)
elif name == "author":
print("Author: " + self._content)
elif name == "year":
print("Year: " + self._content)
elif name == "price":
print("Price: " + self._content)
else:
pass
def characters(self, content): # 获取标签内容
self._content = content
xml = '''
<birdpython>
<book category="python教程">
<title>python</title>
<author>韩俊</author>
<year>2023</year>
<price>免费</price>
</book>
<book category="人工智能教程">
<title>python视频</title>
<author>韩俊</author>
<year>2023</year>
<price>微信打赏赠送</price>
</book>
</birdpython>
'''
handler = MyHandler() # 自定义类实例化成对象
sax.parseString(xml, handler) # 解析xml文件
现在我们一般使用 json 替代了 xml,关于 xml 结构和解析的东西,我们本节课不在赘述。
本节重要知识点
会使用 xml 中的 sax 模块。
了解一下 xml 结构。
作者头像
作者名称
作者性别



评论列表