Python 解析5层 XML
XML (eXtensible Markup Language) 是一种用于存储和传输数据的标记语言。在日常工作中,我们经常会遇到需要解析 XML 文件的需求。Python 提供了多种解析 XML 的方法和库,本文将介绍如何使用 Python 解析包含5层嵌套结构的 XML 文件。
XML 的基本结构
XML 文件由标签、属性和文本组成。标签用尖括号 <
和 >
包围,属性以键值对的形式出现在标签中,文本则位于标签的开始和结束之间。例如,下面是一个简单的 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title>Python Cookbook</title>
<author>David Beazley</author>
<year>2013</year>
<price>39.95</price>
</book>
</bookstore>
在这个例子中,bookstore
是根标签,它包含了一个 book
标签,book
标签又包含了 title
、author
、year
和 price
标签。每个标签都可以拥有属性,例如 version
和 encoding
是 <?xml>
标签的属性。
解析 XML 的方法
Python 提供了多个库和方法来解析 XML 文件,包括 ElementTree、minidom、lxml 等。在本文中,我们将使用 Python 标准库中的 ElementTree
模块来解析 XML。
首先,我们需要安装 ElementTree
模块。可以使用以下命令来安装:
pip install elementtree
接下来,我们将使用以下代码来解析 XML 文件:
import xml.etree.ElementTree as ET
# 加载 XML 文件
tree = ET.parse('books.xml')
# 获取根元素
root = tree.getroot()
# 遍历根元素的子元素
for child in root:
print(child.tag, child.attrib)
在上面的代码中,我们首先使用 ET.parse()
方法加载 XML 文件,并将其解析为一个树状结构。然后,我们使用 tree.getroot()
方法获取根元素,并通过遍历根元素的子元素来访问 XML 文件中的数据。
解析包含5层嵌套结构的 XML
有时候,我们会遇到包含多个嵌套层级的 XML 文件。下面是一个包含5层嵌套结构的 XML 文件的示例:
<?xml version="1.0" encoding="UTF-8"?>
<university>
<college name="Engineering">
<department name="Computer Science">
<course name="Introduction to Programming">
<student>
<name>John Doe</name>
<age>20</age>
<gender>Male</gender>
</student>
<student>
<name>Jane Smith</name>
<age>19</age>
<gender>Female</gender>
</student>
</course>
<course name="Data Structures">
<student>
<name>Tom Johnson</name>
<age>21</age>
<gender>Male</gender>
</student>
<student>
<name>Amy Brown</name>
<age>20</age>
<gender>Female</gender>
</student>
</course>
</department>
</college>
</university>
现在,我们来解析这个 XML 文件,并打印出其中的数据:
import xml.etree.ElementTree as ET
# 加载 XML 文件
tree = ET.parse('university.xml')
# 获取根元素
root = tree.getroot()
# 遍历根元素的子元素
for college in root:
print('College:', college.attrib['name'])
for department in college:
print('Department:', department.attrib['name'])
for course in department:
print('Course:', course.attrib['name'])
for student in course:
print('Student:')
for data in student:
print(data.tag + ':', data.text)
在上面的代码中,我们先遍历根元素的子元素 college
,然后遍历 college
的子元素 department
,再遍历 department
的子元素 course
,最后遍历 course
的子元素 student
。通过使用