python对XML的解析

常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。

python有三种方法解析XML,分别是SAX,DOM,以及ElementTree三种方法。

以下案例依次介绍三种方法:

  先写一个关于book的xml文件

<books><book id="01"><bookname>python入门</bookname><author>李强</author><price>25</price></book><book id="02"><bookname>java基础</bookname><author>王洋</author><price>30</price></book><book id="03"><bookname>神雕侠侣</bookname><author>金庸</author><price>212</price></book></books>

1.DOM(Document Object Model)

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

操作代码如下:

#引入parse的包
from xml.dom.minidom import parsedoc=parse("book.xml")                   #先把xml文件加载进来
root=doc.documentElement                #获取元素的根节点
books=root.getElementsByTagName('book') #找到子节点,得到的是一个数组for book in books:                       #把所有的子节点进行遍历print("===book====")if book.hasAttribute('id'):             #如果有ID属性,则输出print('书的ID是:%s'% book.getAttribute('id'))bookname=book.getElementsByTagName("bookname")[0]  #根据标签名找到,并且输出第一个元素print("书名是:%s"%bookname.childNodes[0].data)      #输出标签名的子节点的第一个值,并转为data类型author=book.getElementsByTagName("author")[0]print("作者是:%s"%author.childNodes[0].data)price=book.getElementsByTagName("price")[0]print("价格是:%s"%price.childNodes[0].data)

2.SAX (simple API for XML )

python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。

from xml.sax import parse, ContentHandler #引入继承包ContentHandler#书的类
class Book:#定义初始化属性,和xml文件属性相同def __init__(self,bookname=None,author=None,price=None):self.bookname=booknameself.author=authorself.price=pricedef __str__(self):  #转化为字符串输出return self.bookname+","+self.author+","+self.pricebooks=[]#定义一个书的数组,用来存放每次得到的数据#定义继承ContentHandler的类,可以实现相应的方法
class bkdemo(ContentHandler):def __init__(self):#定义全局变量self.book=None #用来接收book的相应数据self.tag=None  #用来接收characters方法得到的content内容def startDocument(self): #books对象开始print("对象开始")def endDocument(self):  #books对象结束print("对象结束")def startElement(self, name, attrs): #每一个标签元素的开始,name:标签名称 attrs:标签内部相应属性if name=='book':  #如果标签名是bookself.book=Book()  #创建一个Book()对象def endElement(self, name):  #每一个标签元素的结束,name:标签名称 (此时才会得到相应的content)if name=='bookname':self.book.bookname=self.tag  #对象的标签名=得到相应content的值if name=='author':self.book.author=self.tagif name=='price':self.book.price=self.tagif name=='book':books.append(self.book)  #为定义的数组追加得到的相应元素def characters(self, content):self.tag=content   #写了self的,就可以定义为全局变量
parse("book.xml",bkdemo())  #parse的方法,分别指明xml文件,并调用查找的类方法
for i in books:   #对数组books[]循环print(i)

3.ElementTree(元素树)

ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。

from xml.etree import ElementTree  #引入ElementTree的包
#书的类
class Book:#定义初始化属性,和xml文件属性相同def __init__(self,bookname=None,author=None,price=None):self.bookname=booknameself.author=authorself.price=pricedef __str__(self):  #转化为字符串输出return self.bookname+","+self.author+","+self.priceroota=ElementTree.parse("book.xml") #parse方法读取xml文件,得到元素树
bk=roota.findall("book")  #findall查询所有的book标签
boo=[]   #定义一个集合
for aa in bk:   #对得到的所有的根元素下的子标签循环输出book=Book()   #定义一个类对象book.bookname=aa.find("bookname").text #对象的相应标签值=子标签查找到的固定标签名,并以text形式输出book.author=aa.find("author").textbook.price=aa.find("price").textboo.append(book)  #将得到的属性值追加到定义的集合中for i in boo:  #遍历集合print(i)

输出结果:

python入门,李强,25
java基础,王洋,30
神雕侠侣,金庸,212Process finished with exit code 0

注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。

本章节使用到的 XML 实例文件 movies.xml 内容如下:

转载于:https://www.cnblogs.com/qianshuixianyu/p/9184213.html

python之XML文件解析相关推荐

  1. python解析xml文件成字典_如何在Python中将XML文件解析为字典?

    您可以使用getElementsByTagName和getAttribute来跟踪结果:dict_users = dict() docXML = parse('mydata.xml') users= ...

  2. python 处理xml文件

    XML可扩展标记语言(eXtensible Markup Language),被设计用来传输和存储数据. <?xml version="1.0" encoding=" ...

  3. Python3将xml文件解析为Python对象

    一.说明 从最开始写javascript开始,我就很烦感使用getElementById()等函数来获取节点的方法,获取了一个节点要访问其子孙节点要么child半天要么就再来一个getElementB ...

  4. 【VOC格式xml文件解析】——Python

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/4/26 12:49 # @Author : @linlianqin # @S ...

  5. python读取xml文件信息_python读取xml文件方法解析

    关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码.这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用python来读取xml文件. 什么是xm ...

  6. python读取xml文件信息失败_通过XML读取XML文件时出错。

    我试图用python读取XML文件xml.etree但有时对于某些文件,我在解析文件时会出现内存错误.我的XML文件大小是912Mb,这个问题与文件大小有关吗?在 代码:from xml.etree ...

  7. 100天精通Python(进阶篇)——第36天:Python读写XML文件

    文章目录 一.XML基础概述 1.XML是什么? 2.XML的特点及作用 3.XML文件格式 二.Python解析XML文件 1.ElementTree 方式 2.DOM 方式 三.Python写入X ...

  8. python读取xml文件报错ValueError: multi-byte encodings are not supported

    1.在使用python对xml文件进行读取时,提示ValueError: multi-byte encodings are not supported 很多贴子上说把xml的编码格式改为,就可以正常执 ...

  9. Android开发历程_18(XML文件解析)

    前言  本文主要介绍在Android中怎样来解析XML文件.主要采用的是SAX机制,SAX全称为Simple API for XML,它既是一种接口,也是一个软件包.作为接口,SAX是事件驱动型XML ...

最新文章

  1. linux 档案类型s,Linux学习(四)档案与目录管理
  2. 青龙羊毛——鸡厂签到
  3. C/C++中程序内存区域划分大总结
  4. sklearn模型评估
  5. 高频面试题2:单例设计模式
  6. Windows Server 2003网络配置与管理
  7. Leetcode - Reverse Words
  8. MATLAB视频与图片之间的相互转换
  9. js实现前端数据分页
  10. 3.32 小猪短租的爬虫-
  11. WordPress主题justnews仿某码屋资源下载站源码-整站打包
  12. 高并发(水平扩展,垂直扩展)
  13. 打造企业级云深度学习平台——小米云深度学习平台的架构设计与实现
  14. 【Linux】CentOS7设置笔记本合盖不休眠
  15. 如何将图片中的文字进行提取并编辑
  16. 情境领导者-第七章、解决绩效问题
  17. nvidia-smi卡顿详解
  18. 欧盟对湾区建设_欧盟委员会对.EU域名进行掉头处理
  19. 批处理 删除文件 脚本
  20. 广角广告多媒体发布系统

热门文章

  1. Kali Linux python 安装pip
  2. Mysql备份还原数据库之mysqldump实例及参数详细说明
  3. printf(%d, -10u); 这个输出什么呀, 0或1?
  4. 自动生成纯文本表格的工具
  5. spl_autoload_register与autoload区别
  6. thttpd安装与调试
  7. Asp.net 2.0 C#实现压缩/解压功能
  8. 理解C#中的string类型
  9. Session 详解
  10. 非对称加密算法RSA公钥私钥的模数和指数提取方法