Python解析XML
XML(可扩展标记语言)是一种标记语言,用于在不同应用程序之间传输和存储数据。在Python中,有许多库可以帮助我们解析XML数据,比较常用的有xml.etree.ElementTree
和xml.dom.minidom
。本文将详细介绍如何使用这两个库来解析XML数据。
1. 使用xml.etree.ElementTree解析XML
xml.etree.ElementTree
是Python标准库中用于解析XML的模块。我们可以使用它来解析XML数据并进行相应的操作。
1.1 解析XML文件
下面是一个简单的XML文件data.xml
:
<data>
<country name="Liechtenstein">
<rank>1</rank>
<year>2008</year>
<gdppc>141100</gdppc>
</country>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
</country>
</data>
我们可以使用xml.etree.ElementTree.parse()
函数来解析XML文件,并获取根元素:
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
1.2 遍历XML数据
一旦我们获取了根元素,就可以遍历XML数据并访问其中的元素和属性。例如,我们可以遍历所有country
元素,并打印出其name
属性和子元素的文本内容:
for country in root.findall('country'):
name = country.attrib['name']
rank = country.find('rank').text
year = country.find('year').text
gdppc = country.find('gdppc').text
print(f'{name}: Rank {rank} in {year}, GDP per capita: {gdppc}')
运行以上代码,输出如下:
Liechtenstein: Rank 1 in 2008, GDP per capita: 141100
Singapore: Rank 4 in 2011, GDP per capita: 59900
Panama: Rank 68 in 2011, GDP per capita: 13600
1.3 修改XML数据
除了遍历XML数据,我们还可以修改XML数据。例如,我们可以修改rank
元素的文本内容:
for country in root.findall('country'):
rank = int(country.find('rank').text)
country.find('rank').text = str(rank + 1)
tree.write('data_updated.xml')
上述代码将rank
元素的值加1,并将修改后的数据写入data_updated.xml
文件中。
2. 使用xml.dom.minidom解析XML
xml.dom.minidom
是Python标准库中的另一个模块,可以帮助我们解析XML数据。
2.1 解析XML文件
我们可以使用xml.dom.minidom.parse()
函数来解析XML文件:
import xml.dom.minidom
dom = xml.dom.minidom.parse('data.xml')
2.2 遍历XML数据
xml.dom.minidom
返回的是一个DOM(文档对象模型)对象,我们可以通过它来访问XML数据。例如,我们可以遍历所有country
元素,并打印出其属性和子元素的文本内容:
countries = dom.getElementsByTagName('country')
for country in countries:
name = country.getAttribute('name')
rank = country.getElementsByTagName('rank')[0].firstChild.data
year = country.getElementsByTagName('year')[0].firstChild.data
gdppc = country.getElementsByTagName('gdppc')[0].firstChild.data
print(f'{name}: Rank {rank} in {year}, GDP per capita: {gdppc}')
2.3 修改XML数据
我们也可以使用xml.dom.minidom
来修改XML数据。例如,我们可以修改gdppc
元素的文本内容:
countries = dom.getElementsByTagName('country')
for country in countries:
gdppc = int(country.getElementsByTagName('gdppc')[0].firstChild.data)
new_gdppc = gdppc * 2
country.getElementsByTagName('gdppc')[0].firstChild.data = str(new_gdppc)
with open('data_updated.xml', 'w') as f:
f.write(dom.toprettyxml())
上述代码将gdppc
元素的值乘以2,并将修改后的数据写入data_updated.xml
文件中。
总结
本文详细介绍了如何使用xml.etree.ElementTree
和xml.dom.minidom
两个库来解析XML数据,并展示了遍历和修改XML数据的方法。通过学习本文,你可以更好地理解如何在Python中操作XML数据。