用python解析xml的几种方法,Python_XML的三种解析方法
什么是XML?
XML 指可扩展标记语言(eXtensible Markup Language)。
XML 被设计用来传输和存储数据。
XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。
它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
python有三种方法解析XML,SAX,DOM,以及ElementTree:
1.SAX (simple API for XML )
pyhton 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
2.DOM(Document Object Model)
将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。
python使用SAX解析xml
SAX是一种基于事件驱动的API。
利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。
解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;
而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。
1、对大型文件进行处理;
2、只需要文件的部分内容,或者只需从文件中得到特定信息。
3、想建立自己的对象模型的时候。
在python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sax.handler中的ContentHandler。
ContentHandler类方法介绍
characters(content)方法
调用时机:
从行开始,遇到标签之前,存在字符,content的值为这些字符串。
从一个标签,遇到下一个标签之前, 存在字符,content的值为这些字符串。
从一个标签,遇到行结束符之前,存在字符,content的值为这些字符串。
标签可以是开始标签,也可以是结束标签。
startDocument()方法
文档启动的时候调用。
endDocument()方法
解析器到达文档结尾时调用。
startElement(name, attrs)方法
遇到XML开始标签时调用,name是标签的名字,attrs是标签的属性值字典。
endElement(name)方法
遇到XML结束标签时调用。
make_parser方法
以下方法创建一个新的解析器对象并返回。
xml.sax.make_parser( [parser_list] )
参数说明:
parser_list - 可选参数,解析器列表
parser方法
以下方法创建一个 SAX 解析器并解析xml文档:
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
参数说明:
xmlfile - xml文件名
contenthandler - 必须是一个ContentHandler的对象
errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象
parseString方法
parseString方法创建一个XML解析器并解析xml字符串:
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
参数说明:
xmlstring - xml字符串
contenthandler - 必须是一个ContentHandler的对象
errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象
<;爬虫实战>;豆瓣电影TOP250(三种解析方法)
1.豆瓣电影排行.py # 目标:爬取豆瓣电影排行榜TOP250的电影信息 # 信息包括:电影名字,上映时间,主演,评分,导演,一句话评价 # 解析用学过的几种方法都实验一下①正则表达式.②Beaut ...
QT XML文档的解析 QXmlStreamReader, DOM,SAX 三种解析方法 简单示例
0. xml文档如下 <?xml version="1.0"?>
mysql 执行语句
连接数据库: $con = mysql_connect(服务器地址,用户名,密码): 选择数据库: $select = mysql_select_db(数据库名称); $select = mysql_ ...
[Docker]Docker拉取,上传镜像到Harbor仓库
需求 因为项目的需求,需要制作一个基于tomcat的镜像.那么前提就是,需要有tomcat的基础镜像. 怎么做 我的思路跑偏了,本来以为是需要将tomcat下载下来,然后通过docker命令,让它成为 ...
Bash Game 巴什博弈
巴什博弈(Bash Game,同余理论):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先 ...
在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句
在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句 突然看到这个问题,脑袋一蒙,不知道啥意思,后来想想,试图把select里的选项放到后面,问题自然解决! 下面这 ...
用python解析xml的几种方法,Python_XML的三种解析方法相关推荐
- python中none算变量吗_在python中对变量判断是否为None的三种方法总结
三种主要的写法有: 第一种:if X is None; 第二种:if not X: 当X为None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()这 ...
- python输出字符串的后两位_Python字符串三种格式化输出
字符串格式化输出是python非常重要的基础语法,今天就把三种格式化输出做一个简单的总结,希望对大家有帮助. 格式化输出:内容按照一定格式要求进行输出. 1.使用占位符%输出 python2.6版本之 ...
- java解析遍历List集合(其实现子类)的三种方式
java解析遍历List集合(其实现子类)的三种方式 1 使用迭代器对象 1.1 底层 1.1.1 List接口继承了Collection接口 1.1.2 而Collection接口又继承了Itera ...
- 微信小程序中带参数返回上一页的方法总结(三种)
本篇文章给大家带来的内容是关于微信小程序中带参数返回上一页的方法总结(三种),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 方法一 把当前页面数据放入本地缓存( wx.setStor ...
- 统计方法耗时的三种秘法
统计方法耗时的三种秘法 1. 统计方法耗时的三种秘法 1.1 `System.currentTimeMillis()` 统计法 1.2 `org.springframework.util.StopWa ...
- Spring的4种事务管理(1种编程式事务+三种声明事务)
2019独角兽企业重金招聘Python工程师标准>>> Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Spring事务的介绍 二.编程式事务xml的配置 注入后直接 ...
- 安川伺服总线通讯方式_plc通讯方式有哪三种?plc常见的三种通讯方式
原标题:plc通讯方式有哪三种?plc常见的三种通讯方式 PLC = Programmable Logic Controller,可编程逻辑控制器,一种数字运算操作的电子系统,专为在工业环境应用而设计 ...
- 鬼谷子:深交四种人,绝交三种人
导读: 鬼谷子是中国历史上一位极具神秘色彩的人物,被誉为千古奇人,创建鬼谷门派,长于持身养性,精于心理揣摩,深明刚柔之势,通晓纵横捭阖之术,独具通天之智.鬼谷子身怀旷世绝学,智慧卓绝,精通百家学问,是 ...
- golang: 密码中允许出现数字、大写字母、小写字母、特殊字符,但至少包含其中2种且长度在8-16之间(四种符号任意满足三种即可)
要求: 密码中允许出现数字.大写字母.小写字母.特殊字符(.@$!%*#_~?&^),但至少包含其中2种且长度在8-16之间(四种符号任意满足三种即可) package mainimport ...
最新文章
- Linux下用C语言最基本的程序开发与调试
- 暑期集训2:ACM基础算法 练习题B:CF-1008B
- 中文Python:中文编程不是梦
- 中国官方唯一无人车路测报告一出炉,百度股价又涨了
- javascript的window.open()详解
- 继承的编写小结汇总。
- Kaggle | 用 YoloV5 将物体检测的性能翻倍的心路历程
- 【nodejs原理源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
- 使用SQL Server Management Studio 创建作业备份数据库
- 基于vue的验证码组件
- linux压力测试工具post,linux 下如何做压力测试 ab 压力测试 - 沃森博客
- 我国终于有了密码法,将2020年1月1日起施行!
- Java温度转换(写一个将华氏温度转换成摄氏温度的程序)
- BLE(12)—— 细说 Connection
- android10无法获取ssid,How to get WIFI SSID in Android 10.0?
- 将png格式图片批量转存为jpg格式
- BZOJ 5109 [CodePlus 2017]大吉大利,晚上吃鸡!
- 新手常见(五国)(-v图)错误解决(原版,破解kernel,补丁kext下载)
- android studio 免费实现聊天视频功能
- 西域大都护府 第四期cfs靶场 渗透记录
热门文章
- C# 虹软arcface人脸识别入门篇
- 已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数,bitmap实现代码。
- 关于jueqry 选择器后加 [0] 的意义 $(#formId)[0]
- matlab读mif文件,利用matlab进行ROM初始化mif文件方法
- 分级输出四路带保护程控电源设计与实现
- 前端小票打印、网页打印(uniapp、小程序、ESC/POS指令)
- nginx服务器资源路径配置文件,查看nginx配置文件路径和资源文件路径的方法
- C# XPath 读取HL7-V3消息格式 xml 文件信息
- 如果一个巨蟹座的人开始忙了……
- 705页PPT|智慧金融大数据可视化展示平台建设方案(附PDF下载)