Python3之XML解析

本文介绍了XML的基本概念和Python3中解析XML的两种主要方式:SAX和DOM。详细讲解了SAX解析XML时的ContentHandler类方法,包括characters(), startDocument(), endDocument(), startElement()和endElement()。还提到了DOM解析方法,通过xml.dom.minidom.parse()获取DOM对象,并展示了获取元素和属性的方法。" 132464353,19671681,Android定时器实战指南,"['Android开发', '编程实践', '定时任务']
摘要由CSDN通过智能技术生成
一、概念

XML 是可扩展标记语言(eXtensible Markup Language),是标准通用标记语言的子集,也是一种用于标记电子文件使其具有结构性的标记语言

XML 被设计用来传输和存储数据(当使用数据库存储数据时,不建议使用XML储存数据)

XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识,它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言

XML文件格式介绍:

格式:<tag attrib = > text </tag> tail
例:

<APP_KEY channel = 'CSDN'> hello123456789 </APP_KEY>

说明:
1、tag,即标签:用于标识该元素表示哪种数据,即APP_KEY;
2、attrib,即属性:用字典(Dictionary)形式保存,即{‘channel’ = ‘CSDN’};
3、text,文本字符串:可以用来存储一些数据,即hello123456789;
4、tail,尾字符串:非必需,例子中没有包含;

该博客使用的 XML 文件:
<collection shelf="New Arrivals"> <movie title="战狼2"> <type director = '吴京'>战争片, 故事片</type> <format>DVD</format> <year>2018</year> <rating>PG</rating> <stars>10</stars> <description>吴京导演的一部爱国主义题材电影</description> </movie> <movie title="北京爱上西雅图"> <type>爱情片</type> <format>DVD</format> <year>2017</year> <rating>R</rating> <stars>8</stars> <description>美好的爱情故事</description> </movie> <movie title="唐人街探案2"> <type>喜剧,故事片</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>王宝强和刘昊然第二次合作探案</description> </movie> <movie title="大鱼海棠"> <type>动画</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>国产动画片</description> </movie> </collection>

二、Python3 对 XML 的解析方式

Python 3对 XML 的解析方式一般有三种,即:SAX、DOM 和 ElementTree

2.1、SAX 方式(simple API for XML)

Python标准库包含 SAX 解析器,SAX 使用事件驱动模型,通过解析 XML 时触发一个个的事件并调用用户自定义的回调函数来解析 XML 文件

2.2、DOM 方式(Document Object Model)

将 XML 文件在内存中解析成一个树,通过对树的操作来解析 XML

三、Python3 使用 SAX 解析 XML

SAX API 文档地址

SAX 是一种基于事件驱动的 API,使用 SAX 解析 XML 涉及到两个部分:解析器和事件处理器。解析器负责读取 XML 文档,并向事件处理器发送事件,如元素开始跟元素结束事件;事件处理器则负责对事件作出响应,对传递的 XML 数据进行处理。

Python3 中使用 SAX 方式处理 XML 时需要先引入 xml.sax 中的 parse() 函数,还有 xml.sax.handler 中的 ContentHandler()函数

3.1、ContentHandler类方法

characters(content) 方法
调用位置:
1、从行开始,遇到标签之前,若存在字符,content 的值为这些字符串;
2、从一个标签,遇到下一个标签之前, 若存在字符,content 的值为这些字符串;
3、从一个标签,遇到行结束符之前,若存在字符,content 的值为这些字符串;
4、标签可以是开始标签,也可以是结束标签;
startDocument() 方法
文档启动的时候调用
endDocument() 方法
解析器到达文档结尾时调用
startElement(name, attrs) 方法
遇到XML开始标签时调用,name 是标签的名字,attrs 是标签的属性值字典
endElement(name) 方法
遇到XML结束标签时调用

3.2、make_parser()方法

make_parser()方法创建一个新的解析器对象并返回,语法为:

xml.sax.make_parser([parser_list])

parser_list:可选参数,解析器列表

3.3、parser()方法

parser()方法创建一个 SAX 解析器并解析xml文档,语法为:

xml.sax.parser(xmlfile , contenthandler, errorhandler)

xmlfile:xml文件名
contenthandler:必须是一个 ContentHandler 对象
errorhandler:如果指定该参数,errorhandler 必须是一个 SAX ErrorHandler 对象

3.4、parserString()方法

parserString()方法创建一个新的解析器并解析XML字符串,语法为:

xml.sax.parserString(xmlstring , contenthandler , errorhandler)

xmlstring:xml字符串
contenthandler:必须是一个 ContentHandler 对象
errorhandler:如果指定该参数,errorhandler 必须是一个 SAX ErrorHandler 对象

"""
使用SAX解析XML文件
"""

# 1、导入SAX包
from  xml import sax

# 2、创建contenthandler类,继承xml.sax.ContentHandler
class Moviehandler(sax.ContentHandler
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值