Python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
XML简介
XML (eXtensible Markup Language) 是一种标记语言,它的设计目标是传输数据而不是显示数据。XML的设计宗旨是传输数据,而HTML的设计宗旨是显示数据。XML是一种纯文本格式,所以它可以被任何文本编辑器读取和编辑。
什么是DOM
DOM是Document Object Model的缩写,翻译成中文就是文档对象模型。它是W3C组织推荐的处理可扩展标记语言的标准程序界面。在实际应用中,DOM的最大作用就是对页面中的所有元素进行操作。
DOM将HTML或XML文档表示为由对象构成的树。通过DOM,开发者可以在设计时添加或删除HTML文档的内容和属性、增加或删除HTML文档中的节点以及对HTML文档的任何部分进行修改。
XML解析与生成
Python标准库提供了两种XML解析方式:DOM和ElementTree。其中,DOM(文档对象模型)将整个XML文档载入内存,并构造文档对象模型树,可以对文档树进行操作。ElementTree则采用迭代器方式逐行解析,占用资源相对较少,适用于大文件或流解析。
同时,Python标准库中也集成了一个XML生成模块:xml.etree.ElementTree。它提供了如下功能:
-
直接利用标记和文本创建一个新的元素。
-
得到元素,访问和修改元素的属性。
-
在元素之间增加和删除空行和其他相关的字符串内容。
-
搜索某个元素或一组元素。
-
遍历整个文档。
下面分别介绍DOM和ElementTree的使用。
DOM
要使用DOM,需要先载入需要操作的XML文档,载入方法如下:
import xml.dom.minidom
dom = xml.dom.minidom.parse('books.xml')
其中,xml.dom.minidom.parse()方法可以读取指定文件并返回代表整个文档的document对象。接下来可以对document对象进行操作,例如获取根节点:
root = dom.documentElement
获取指定标签内容
通过DOM获取指定标签内容的方法非常简单,只需要利用element.getElementsByTagName(tagname)方法即可。例如读取books.xml文件中的所有书名:
import xml.dom.minidom
dom = xml.dom.minidom.parse('books.xml')
root = dom.documentElement
titles = root.getElementsByTagName('title')
for title in titles:
print(title.firstChild.data)
修改XML内容
修改XML内容非常简单,只需要获取到需要修改的元素,然后利用dom实例提供的操作方法进行修改即可。例如下面代码将books.xml文件中的第一本书的价格修改为30.0:
import xml.dom.minidom
dom = xml.dom.minidom.parse('books.xml')
root = dom.documentElement
first_book = root.getElementsByTagName('book')[0]
price = first_book.getElementsByTagName('price')[0]
price.firstChild.data = '30.0'
with open('books.xml', 'w') as f:
dom.writexml(f)
将修改后的内容写回到文件中,需要利用dom实例提供的writexml()方法,并指定文件句柄。
ElementTree
使用ElementTree解析XML非常简单,基本操作只有三个方法:Element构造、parse和findall。Element构造方法可以用来创建新元素;parse方法可以读取XML文件并返回一个Element对象,该对象构成了整个解析树;findall方法可以用来遍历解析树,返回指定标签的所有元素列表。
读取XML文件可以通过parse方法完成:
import xml.etree.ElementTree as ET
tree = ET.parse('books.xml')
root = tree.getroot()
获取指定标签内容也非常简单,只需要利用findall方法获取指定标签的所有元素列表,然后遍历列表即可。例如读取books.xml文件中的所有书名:
import xml.etree.ElementTree as ET
tree = ET.parse('books.xml')
titles = tree.findall('.//title')
for title in titles:
print(title.text)
修改XML内容需要用到Element对象的set方法,例如下面代码将books.xml文件中的第一本书的价格修改为30.0:
import xml.etree.ElementTree as ET
tree = ET.parse('books.xml')
root = tree.getroot()
first_book = root.find('book')
price = first_book.find('price')
price.text = '30.0'
tree.write('books.xml')
通过Element对象的write方法将修改后的内容写回到文件中。
总结
本文介绍了XML的基本概念和两种Python解析方式DOM和ElementTree的使用方法,并给出了多个实例供参考。XML解析和生成是Python网络编程的重要组成部分,十分实用,要学好Python网络编程,有必要深入了解XML的相关知识。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree) - Python技术站