Python XML 解析
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言。它是一种自我描述的语言,允许用户定义自己的标签和文档结构。Python 提供了多种库来解析 XML 数据,其中最常用的是 xml.etree.ElementTree
和 lxml
。
1. xml.etree.ElementTree
xml.etree.ElementTree
是 Python 的内置库,用于解析和创建 XML 数据。它提供了一个轻量级的、Pythonic 的 API 来处理 XML 数据。
解析 XML
要解析 XML 数据,首先需要导入 xml.etree.ElementTree
模块,并使用 parse()
函数读取 XML 文件。
import xml.etree.ElementTree as ET
tree = ET.parse('example.xml')
root = tree.getroot()
遍历 XML
可以使用 iter()
函数遍历 XML 树。
for child in root:
print(child.tag, child.attrib)
查找元素
可以使用 find()
和 findall()
函数查找元素。
# 查找第一个名为 'title' 的元素
title = root.find('title')
# 查找所有名为 'author' 的元素
authors = root.findall('author')
修改元素
可以修改元素的文本和属性。
# 修改元素的文本
title.text = 'New Title'
# 修改元素的属性
author = root.find('author')
author.set('email', '[email protected]')
写入 XML
修改完 XML 数据后,可以使用 write()
函数将其写入文件。
tree.write('new_example.xml')
2. lxml
lxml
是一个第三方库,它提供了对 XML 和 HTML 的快速、灵活的解析。它是对 xml.etree.ElementTree
的扩展,提供了更多的功能和更好的性能。
安装 lxml
首先,需要安装 lxml
库。可以使用 pip
进行安装。
pip install lxml
解析 XML
使用 lxml
解析 XML 数据与 xml.etree.ElementTree
类似。
from lxml import etree
tree = etree.parse('example.xml')
root = tree.getroot()
遍历 XML
与 xml.etree.ElementTree
类似,可以使用 iter()
函数遍历 XML 树。
for child in root:
print(child.tag, child.attrib)
查找元素
lxml
提供了更多的查找函数,如 xpath()
和 cssselect()
。
# 使用 XPath 查找元素
title = root.xpath('//title')[0]
# 使用 CSS 选择器查找元素
authors = root.cssselect('author')
修改元素
与 xml.etree.ElementTree
类似,可以修改元素的文本和属性。
# 修改元素的文本
title.text = 'New Title'
# 修改元素的属性
author = root.find('author')
author.set('email', '[email protected]')
写入 XML
修改完 XML 数据后,可以使用 write()
函数将其写入文件。
tree.write('new_example.xml')
总结
Python 提供了多种库来解析 XML 数据,其中最常用的是 xml.etree.ElementTree
和 lxml
。xml.etree.ElementTree
是 Python 的内置库,提供了基本的 XML 解析功能。lxml
是一个第三方库,提供了更多的功能和更好的性能。根据需要选择合适的库来解析 XML 数据。