1. 什么是XML?
XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,其设计目标是传输数据而不是显示数据。XML文件包含数据,以及一组规则用于描述该数据的结构和内容。在Python中,我们可以使用xml.etree.ElementTree模块来读取和操作XML文件。
2. XML数据结构
XML数据具有树形结构,即具有层级关系。每个XML文件都有一个根元素,该元素可以包含一个或多个子元素,每个子元素可以包含文本或其他元素。每个元素都由开始标记和结束标记组成,开始标记包含元素的名称,结束标记以“/”开始并包含元素名称。
2.1 XML示例
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="children">
<title>Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
在上面的示例中,<bookstore> 元素是根元素,它包含两个子元素 <book>。这些子元素都包含四个子元素:<title>、<author>、<year> 和 <price>。
3. Python解析XML文件
在Python中,我们可以使用xml.etree.ElementTree模块来解析XML文件。该模块提供了ElementTree类,该类表示XML文件中的整个文档或其中的一部分。我们可以使用ElementTree类中的find、findall、iter等方法来遍历XML文件中的元素。
3.1 读取XML文件
假设我们有一个XML文件students.xml,其中包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student>
<name>Alice</name>
<age>18</age>
<gender>female</gender>
<major>Computer Science</major>
</student>
<student>
<name>Bob</name>
<age>19</age>
<gender>male</gender>
<major>Mathematics</major>
</student>
</students>
我们可以使用ElementTree类中的fromstring方法来读取该文件:
import xml.etree.ElementTree as ET
# 读取XML文件
tree = ET.ElementTree(file='students.xml')
root = tree.getroot()
在上面的代码中,我们使用ElementTree的file方法读取students.xml文件,并使用getroot方法获取根元素。现在,我们可以使用ElementTree类的find、findall等方法来查找元素。
3.2 查找元素
我们可以使用ElementTree类中的find、findall方法来查找元素。find方法返回与指定路径匹配的第一个元素,而findall方法返回与指定路径匹配的所有元素。
例如,假设我们要查找所有年龄大于18岁的学生的姓名,我们可以使用如下代码:
# 查找所有年龄大于18岁的学生的姓名
for student in root.findall(".//student[age>'18']"):
name = student.find('name').text
age = student.find('age').text
print('Name:', name, ' Age:', age)
输出结果为:
Name: Bob Age: 19
在上面的代码中,我们使用findall方法查找所有年龄大于18岁的学生,使用find方法查找学生的姓名和年龄,并将它们打印出来。
3.3 创建XML文件
我们也可以使用ElementTree类来创建一个空的XML文件,然后向其中添加元素。
例如,假设我们要创建一个XML文件books.xml,并向其中添加两个书籍信息:
# 创建XML文件
root = ET.Element('books')
book1 = ET.SubElement(root, 'book')
book1.attrib['category'] = 'children'
title1 = ET.SubElement(book1, 'title')
title1.text = 'Harry Potter'
author1 = ET.SubElement(book1, 'author')
author1.text = 'J.K. Rowling'
year1 = ET.SubElement(book1, 'year')
year1.text = '2005'
price1 = ET.SubElement(book1, 'price')
price1.text = '29.99'
book2 = ET.SubElement(root, 'book')
book2.attrib['category'] = 'web'
title2 = ET.SubElement(book2, 'title')
title2.text = 'Learning XML'
author2 = ET.SubElement(book2, 'author')
author2.text = 'Erik T. Ray'
year2 = ET.SubElement(book2, 'year')
year2.text = '2003'
price2 = ET.SubElement(book2, 'price')
price2.text = '39.95'
# 保存XML文件
tree = ET.ElementTree(root)
tree.write('books.xml', encoding='utf-8', xml_declaration=True)
在上面的代码中,我们首先使用ElementTree类的Element方法创建一个名为books的根元素,然后使用SubElement方法在根元素下添加两个名为book的子元素。接下来,我们在每个book元素下添加不同的子元素,例如title、author、year和price。最后,我们使用ElementTree类的write方法将XML文件保存到磁盘上。
4. 总结
在Python中,我们可以使用xml.etree.ElementTree模块来读取和操作XML文件。该模块提供了ElementTree类,该类表示XML文件中的整个文档或其中的一部分。我们可以使用ElementTree类中的find、findall、iter等方法来遍历XML文件中的元素。此外,我们还可以使用ElementTree类来创建XML文件,并向其中添加元素。