📜  在Python中读取和写入 XML 文件(1)

📅  最后修改于: 2023-12-03 15:37:38.578000             🧑  作者: Mango

在Python中读取和写入XML文件

XML(可扩展标记语言)是一种用于交换数据的常用格式。Python的标准库支持XML解析和生成。本文将介绍如何在Python中读取和写入XML文件。

什么是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>标记表示,并用namedirection属性来标识邻国的名称和方向。

解析XML文件

要在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属性获取标记内的文本。

生成XML文件

要在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文档。