📅  最后修改于: 2023-12-03 15:37:38.578000             🧑  作者: Mango
XML(可扩展标记语言)是一种用于交换数据的常用格式。Python的标准库支持XML解析和生成。本文将介绍如何在Python中读取和写入XML文件。
XML是一种类似HTML的语言,它使用标记来标识文本中的数据。与HTML不同的是,XML标记没有预定义的标签和属性,因此XML可以用来表示任何类型的数据。
例如,下面是一个简单的XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
</data>
在这个XML文档中,每个国家都用<country>
标记表示,通过name
属性来标识国家的名称。国家的排名、年份和GDP则用<rank>
、<year>
和<gdppc>
标记表示,而邻国则用<neighbor>
标记表示,并用name
和direction
属性来标识邻国的名称和方向。
要在Python中解析XML文件,可以使用标准库中的xml.etree.ElementTree
模块。首先要使用该模块的parse()
函数解析XML文件,得到一个根元素对象,然后通过该对象的findall()
和find()
方法查找特定标记的元素。
例如,要读取上述XML文档中的所有国家名称,可以使用以下代码:
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml') # 解析XML文件
root = tree.getroot() # 获取根元素对象
# 遍历所有<country>标记并获取name属性的值
for country in root.findall('country'):
name = country.get('name')
print(name)
输出结果为:
Liechtenstein
Singapore
在上面的代码中,findall()
方法查找所有<country>
标记,然后再通过get()
方法获取name
属性的值。
类似地,要读取国家的排名、年份和GDP,可以使用以下代码:
# 遍历所有<country>标记并获取排名、年份和GDP
for country in root.findall('country'):
rank = country.find('rank').text
year = country.find('year').text
gdppc = country.find('gdppc').text
print(rank, year, gdppc)
输出结果为:
1 2008 141100
4 2011 59900
在上面的代码中,find()
方法查找指定标记,并使用text
属性获取标记内的文本。
要在Python中生成XML文件,可以使用标准库中的xml.etree.ElementTree
模块。首先要创建一个根元素对象,并通过该对象的SubElement()
方法添加子元素,然后使用ElementTree()
函数将根元素对象转换为XML文档。
例如,要生成一个与上述XML文档相同的XML文件,可以使用以下代码:
import xml.etree.ElementTree as ET
root = ET.Element('data') # 创建根元素对象
# 添加<country>标记和子元素
country1 = ET.SubElement(root, 'country')
country1.set('name', 'Liechtenstein')
rank1 = ET.SubElement(country1, 'rank')
rank1.text = '1'
year1 = ET.SubElement(country1, 'year')
year1.text = '2008'
gdppc1 = ET.SubElement(country1, 'gdppc')
gdppc1.text = '141100'
neighbor1a = ET.SubElement(country1, 'neighbor')
neighbor1a.set('name', 'Austria')
neighbor1a.set('direction', 'E')
neighbor1b = ET.SubElement(country1, 'neighbor')
neighbor1b.set('name', 'Switzerland')
neighbor1b.set('direction', 'W')
# 添加<country>标记和子元素
country2 = ET.SubElement(root, 'country')
country2.set('name', 'Singapore')
rank2 = ET.SubElement(country2, 'rank')
rank2.text = '4'
year2 = ET.SubElement(country2, 'year')
year2.text = '2011'
gdppc2 = ET.SubElement(country2, 'gdppc')
gdppc2.text = '59900'
neighbor2 = ET.SubElement(country2, 'neighbor')
neighbor2.set('name', 'Malaysia')
neighbor2.set('direction', 'N')
tree = ET.ElementTree(root) # 将根元素对象转换为XML文档
tree.write('output.xml') # 将XML文档写入文件
在上面的代码中,首先创建一个名为data
的根元素对象,然后添加两个<country>
标记和它们的子元素。SubElement()
方法用于创建子元素,并使用set()
方法设置子元素的属性和值。
最后,将根元素对象转换为XML文档,然后使用write()
方法将XML文档写入文件。生成的XML文件内容与前面的XML文档相同。
本文介绍了如何在Python中读取和写入XML文件。要解析XML文件,可以使用xml.etree.ElementTree
模块的parse()
函数解析XML文件,然后使用findall()
和find()
方法查找指定标记的元素。要生成XML文件,可以创建一个根元素对象,并使用SubElement()
方法添加子元素,然后使用ElementTree()
函数将根元素对象转换为XML文档。