Python 解析XML文件

  • Post category:Python

Python解析XML文件的方法一般有两种,一种是使用内置的xml.etree.ElementTree模块进行解析,另一种是使用第三方库lxml。本文将介绍这两种方法的具体使用。

一、使用xml.etree.ElementTree模块解析XML文件

1. 载入XML数据

首先,我们需要载入XML数据。假设我们有一个book.xml文件,内容如下所示:

<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer&apos;s Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    <publish_date>2000-10-01</publish_date>
    <description>An in-depth look at creating applications 
      with XML.</description>
  </book>
  <book id="bk102">
    <author>Ralls, Kim</author>
    <title>Midnight Rain</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2000-12-16</publish_date>
    <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
  </book>
</catalog>

用以下代码将XML文件载入内存:

import xml.etree.ElementTree as ET

tree = ET.parse('book.xml')
root = tree.getroot()

2. 遍历XML文档

我们可以遍历整个XML文档,获取文档中的所有元素及其属性值。例如,以下代码输出每个book元素的id属性值:

for book in root.findall('book'):
  book_id = book.get('id')
  print(book_id)

3. 查找元素

我们使用 findall() 方法查找特定类型的元素。例如,以下代码输出所有book元素的title元素内容:

for book in root.findall('book'):
    title = book.find('title').text
    print(title)

4. 修改元素

我们可以使用 set() 方法修改元素属性。例如,以下代码将第一个book元素的id属性修改为 ‘bk111’:

root.findall('book')[0].set('id', 'bk111')

5. 删除元素

我们可以使用 remove() 方法删除元素。例如,以下代码删除第二个book元素:

root.remove(root.findall('book')[1])

二、使用lxml库解析XML文件

1. 载入XML数据

我们同样需要载入XML数据。与使用xml.etree.ElementTree模块方法类似,我们可以使用以下代码将XML文件载入内存:

from lxml import etree

tree = etree.parse('book.xml')
root = tree.getroot()

2. 遍历XML文档

我们可以使用XPath表达式遍历XML文档。例如,以下代码输出所有book元素的title元素内容:

for book in root.xpath('//book'):
    title = book.xpath('title/text()')[0]
    print(title)

3. 查找元素

我们同样可以使用XPath表达式查找特定类型的元素。例如,以下代码输出所有book元素的author元素内容:

for book in root.xpath('//book'):
    author = book.xpath('author/text()')[0]
    print(author)

4. 修改元素

我们同样可以使用 set() 方法修改元素属性。例如,以下代码将第一个book元素的id属性修改为 ‘bk111’:

root.xpath('//book')[0].set('id', 'bk111')

5. 删除元素

我们可以使用 remove() 方法删除元素。例如,以下代码删除第二个book元素:

root.xpath('//book')[1].getparent().remove(root.xpath('//book')[1])

以上就是Python解析XML文件的两种方法,分别使用xml.etree.ElementTree模块和lxml库。