Python 之 解析xml

前言

小白个人研究成果,仅供参考

这里介绍解析xml的两种方式

一、xml文档

以下是我需要解析的demo.xml文档

<collection shelf="New Arrivals">
	<class className="一年级(1)班">
	   <code>20210001</code>
	   <number>30</number>
	   <teacher>张秀梅</teacher>
	</class>
	<class className="一年级(2)班">
	   <code>20210002</code>
	   <number>31</number>
	   <teacher>吴启秀</teacher>
	</class>
	<class className="一年级(3)班">
	   <code>20210003</code>
	   <number>29</number>
	   <teacher>杜飞飞</teacher>
	</class>
</collection>

二、SAX解析

import xml.sax
import xml.dom.minidom


class ClassHealder(xml.sax.ContentHandler):
    # 重写init函数
    def __init__(self):
        # 设置一个通用变量
        self.CurrentData = ''
        self.code = ''
        self.number = ''
        self.teacher = ''

    # 重写元素开始事件
    def startElement(self, tag, attributes):
        # 将变量赋值给tag
        self.CurrentData = tag
        if tag == 'class':
            print('-----------class标签-----------')
            className = attributes['className']
            print('movie标签的className是:%s' % className)

    # 重写元素结束事件
    def endElement(self, tag):
        if tag == 'code':
            print('班级编号:', self.code)

        if tag == 'number':
            print('班级人数:', self.number)

        if tag == 'teacher':
            print('班主任:', self.teacher)

        self.CurrentData = ''

    # 重写内容处理事件
    def characters(self, content):
        if self.CurrentData == 'code':
            self.code = content

        if self.CurrentData == 'number':
            self.number = content

        if self.CurrentData == 'teacher':
            self.teacher = content


if __name__ == '__main__':

    # 创建一个新的解析器对象并返回
    parser = xml.sax.make_parser()
    # 关闭命名空间
    parser.setFeature(xml.sax.handler.feature_namespaces, 0)

    # 重写 ContextHandler
    Handle = ClassHealder()
    parser.setContentHandler(Handle)
    # 设置xml文件读取路径
    parser.parse('C:\\Users\\yzzn\\Desktop\\demo.xml')

运行结果如下:
在这里插入图片描述

三、minidom解析

if __name__ == '__main__':
    # 第二种方式,用minidom解析xml
    domTree = xml.dom.minidom.parse('C:\\Users\\yzzn\\Desktop\\demo.xml')
    # 获取所有元素
    eles = domTree.documentElement
    # 获取class元素
    classTag = eles.getElementsByTagName('class')
    # 遍历classTag元素
    for c in classTag:
        # 判断并获取属性值className
        if c.hasAttribute('className'):
            print('班级是:%s' % c.getAttribute('className'))
        # 获取class标签里的子标签
        code = c.getElementsByTagName('code')[0].childNodes[0].data
        number = c.getElementsByTagName('number')[0].childNodes[0].data
        teacher = c.getElementsByTagName('teacher')[0].childNodes[0].data
        print('班级编号:%s,班级人数:%s,班主任:%s' % (code, number, teacher))

    pass


运行结果如下:
在这里插入图片描述

总结

又是努力向上的一天。有啥不足之处欢迎指出
本文参考自:https://www.runoob.com/python/python-xml.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值