下面是Python解析XML文件的完整攻略。
简介
XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据。Python提供了许多库来解析XML文件,其中较为流行的包括ElementTree、minidom等。本文将介绍如何使用ElementTree解析XML文件。
安装
在使用ElementTree前,需要先安装ElementTree库。可以使用pip进行安装:
pip install elementtree
解析XML
使用ElementTree解析XML的基本流程如下:
- 导入ElementTree库。
python
import xml.etree.ElementTree as ET
- 使用parse函数解析XML文件。
python
tree = ET.parse('example.xml')
- 获取根节点。
python
root = tree.getroot()
- 遍历子节点,获取XML文件中的信息。
python
for child in root:
print(child.tag, child.attrib)
其中,tag属性表示节点名称,attrib属性表示节点属性。
示例一:解析简单XML文件
考虑以下XML文件example.xml:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
以下是解析XML文件的Python代码:
import xml.etree.ElementTree as ET
# 解析XML文件
tree = ET.parse('example.xml')
# 获取根节点
root = tree.getroot()
# 遍历子节点,并打印信息
for child in root:
print(child.tag, child.attrib)
for sub_child in child:
print(f"\t{sub_child.tag}: {sub_child.text}")
输出结果如下:
book {'category': 'COOKING'}
title: Everyday Italian
author: Giada De Laurentiis
year: 2005
price: 30.00
book {'category': 'CHILDREN'}
title: Harry Potter
author: J.K. Rowling
year: 2005
price: 29.99
可以看到,代码实现了解析并遍历XML文件,获取了每本书的信息。
示例二:解析复杂XML文件
考虑以下XML文件example2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="001" name="Alice">
<gender>Female</gender>
<age>18</age>
<courses>
<course>Math</course>
<course>English</course>
<course>History</course>
</courses>
</student>
<student id="002" name="Bob">
<gender>Male</gender>
<age>19</age>
<courses>
<course>Physics</course>
<course>Chemistry</course>
</courses>
</student>
</students>
以下是解析XML文件的Python代码:
import xml.etree.ElementTree as ET
# 解析XML文件
tree = ET.parse('example2.xml')
# 获取根节点
root = tree.getroot()
# 遍历子节点,并打印信息
for child in root:
print(child.tag, child.attrib)
for sub_child in child:
if sub_child.tag == 'courses':
courses = [c.text for c in sub_child]
print(f"\tcourses: {', '.join(courses)}")
else:
print(f"\t{sub_child.tag}: {sub_child.text}")
输出结果如下:
student {'id': '001', 'name': 'Alice'}
gender: Female
age: 18
courses: Math, English, History
student {'id': '002', 'name': 'Bob'}
gender: Male
age: 19
courses: Physics, Chemistry
在这个例子中,XML文件较为复杂,包含了学生的基本信息以及其选修的课程。代码根据节点名称判断是否为课程节点,如果是则提取出每个课程名并输出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 解析XML文件 - Python技术站