XML (可扩展标记语言) 是一种用于存储和传输数据的标记语言。它被设计为自我描述且易于人类阅读和编写。在处理 XML 数据时,Python 提供了多种库来简化这一过程,比如 xml.etree.ElementTree
、lxml
和 xml.dom.minidom
等。
XML 文件格式基础
一个简单的 XML 文档看起来像这样:
-- -------------------- ---- ------- ----- --------------- --------- ----- ----------- -------------------- ---------------- ---------- ----------- ------------- ----------------------- -------------------- --------------------------------------- --------------- -------- ---- -- -------- ------------ ---- ------------------ ------- ----------
这个例子展示了几个关键点:
- XML 文档以
<?xml version="1.0"?>
开头,表明这是一个 XML 文档。 - 每个元素由开始标签
<tag>
和结束标签</tag>
包围。 - 元素可以包含文本内容或子元素。
- 属性可以在开始标签中指定,如
<book id="bk101">
。
使用 xml.etree.ElementTree 模块
ElementTree
是 Python 的标准库之一,它提供了一种简单的方式来解析和创建 XML 数据。
解析 XML 文件
首先,我们来看如何使用 ElementTree
解析一个 XML 文件:
import xml.etree.ElementTree as ET tree = ET.parse('books.xml') # 假设你的 XML 文件名为 books.xml root = tree.getroot() print(root.tag) # 输出 'catalog' for child in root: print(child.tag, child.attrib)
这段代码首先导入了 xml.etree.ElementTree
模块,并给它起了一个别名 ET
。然后使用 ET.parse()
方法加载 XML 文件并返回一个树形结构的对象。通过调用 getroot()
方法获取文档的根元素,最后遍历根元素的所有子元素并打印它们的标签名和属性。
创建 XML 文件
创建 XML 文件同样简单:
-- -------------------- ---- ------- ---- --------------------- ------ -------- ----------- -------- ------- - ------------------ ---- - ------------------- ------- ------------- --------- ---------------- -------------- - -------- ---- ---------------- ------------- - ------ ---------- ---------------- ------------- - --------- ---------------- ------------- - ------ ---------------- -------------------- - ------------ ---------------- ------------------- - -------- ----- ----- ------- -------- - ----------------- ------------------------
这里我们创建了一个新的 catalog
元素作为根元素,并在其下添加了一个 book
子元素。通过 SubElement
函数可以方便地添加子元素和设置文本内容。最后使用 tostring()
将整个元素树转换为字符串表示形式。
使用 lxml 库进行更复杂的操作
虽然 ElementTree
已经非常强大,但 lxml
库提供了更多功能,例如 XPath 支持,这使得查找特定节点变得更加容易。
安装 lxml
要使用 lxml
,你需要先安装它:
pip install lxml
使用 XPath 查询
XPath 是一种在 XML 文档中查找信息的语言。lxml
支持 XPath 表达式,可以让你轻松地从复杂的 XML 结构中提取所需的数据。
-- -------------------- ---- ------- ---- ---- ------ ----- ---- - ------------------------ ---- - -------------- - ---- ----- - ---------- - ---- -------------- - -------------------------------------- --- ---- -- --------------- ------------------------------
这段代码使用 XPath 表达式 //book[genre='Computer']
来查找所有 genre
属性值为 "Computer" 的 book
元素,并输出这些元素下的 title
子元素的文本内容。
总结
通过本章的学习,你应该已经掌握了基本的 XML 解析技巧,包括使用 ElementTree
和 lxml
库进行文件读写以及数据查询。在实际应用中,你可以根据需要选择合适的工具和技术来处理 XML 数据。