Python解析XML

Python解析XML

Python解析XML

XML(可扩展标记语言)是一种标记语言,用于在不同应用程序之间传输和存储数据。在Python中,有许多库可以帮助我们解析XML数据,比较常用的有xml.etree.ElementTreexml.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.ElementTreexml.dom.minidom两个库来解析XML数据,并展示了遍历和修改XML数据的方法。通过学习本文,你可以更好地理解如何在Python中操作XML数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程