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 标签又包含了 titleauthoryearprice 标签。每个标签都可以拥有属性,例如 versionencoding<?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。通过使用