Python 3 介绍(十九)--XML 解析详细介绍

目录

1. 使用 xml.etree.ElementTree 解析 XML

1.1 解析 XML 文件

1.2 创建 XML 文档

1.3 查询 XML 文档

1.4 修改 XML 文档

1.5 保存修改后的 XML 文档

2. 使用 xml.dom.minidom 解析 XML

2.1 解析 XML 文件

2.2 创建 XML 文档

2.3 查询 XML 文档

2.4 修改 XML 文档

2.5 保存修改后的 XML 文档

3. 使用第三方库 lxml

3.1 安装 lxml

3.2 解析 XML 文件

3.3 使用 XPath 查询 XML 文档

总结


 

在 Python 3 中,解析 XML(可扩展标记语言)文档是一个常见的需求,尤其是在处理 Web 服务、配置文件或其他结构化数据时。Python 提供了多种内置库来解析 XML 文档,包括 xml.etree.ElementTree(简称 ElementTree),xml.dom.minidom(简称 minidom),以及第三方库如 lxml

下面将详细介绍如何使用 Python 的内置库 ElementTreeminidom 来解析 XML 文档,并给出一些示例。

1. 使用 xml.etree.ElementTree 解析 XML

ElementTree 是 Python 的标准库之一,它提供了一个轻量级且高效的 XML API。使用 ElementTree 可以方便地解析 XML 文档,并对其进行查询和修改。

1.1 解析 XML 文件

 

python

深色版本

1import xml.etree.ElementTree as ET
2
3# 解析 XML 文件
4tree = ET.parse('example.xml')
5root = tree.getroot()
6
7# 打印根节点的标签名
8print(root.tag)  # 输出 "root"

1.2 创建 XML 文档

 

python

深色版本

1# 创建 XML 文档
2root = ET.Element("root")
3child1 = ET.SubElement(root, "child1")
4child2 = ET.SubElement(root, "child2")
5ET.SubElement(child2, "subchild")
6
7# 将 XML 文档转换为字符串
8tree = ET.ElementTree(root)
9tree.write("output.xml")

1.3 查询 XML 文档

 

python

深色版本

1# 查询 XML 文档中的元素
2for elem in root:
3    print(elem.tag, elem.attrib)
4
5# 查找具有特定属性的元素
6for elem in root.iterfind('.//child[@attr="value"]'):
7    print(elem.text)
8
9# 查找所有的 child 元素
10for elem in root.findall('child'):
11    print(elem.tag)
12
13# 查找所有的子元素,包括子元素的子元素
14for elem in root.iter('subchild'):
15    print(elem.tag)

1.4 修改 XML 文档

 

python

深色版本

1# 修改元素的文本
2root.find('child').text = "modified text"
3
4# 修改元素的属性
5root.find('child').set('attr', 'new_value')
6
7# 删除元素
8root.remove(root.find('child'))

1.5 保存修改后的 XML 文档

 

python

深色版本

1tree = ET.ElementTree(root)
2tree.write("output.xml")

2. 使用 xml.dom.minidom 解析 XML

minidom 是 Python 的另一个标准库,它基于 DOM(文档对象模型)规范。DOM 是一种将 XML 文档表示为树结构的方法,其中每个节点都是一个对象。

2.1 解析 XML 文件

 

python

深色版本

1from xml.dom import minidom
2
3# 解析 XML 文件
4doc = minidom.parse('example.xml')
5root = doc.documentElement
6
7# 打印根节点的标签名
8print(root.tagName)  # 输出 "root"

2.2 创建 XML 文档

 

python

深色版本

1# 创建 XML 文档
2doc = minidom.Document()
3root = doc.createElement("root")
4doc.appendChild(root)
5
6child1 = doc.createElement("child1")
7root.appendChild(child1)
8
9child2 = doc.createElement("child2")
10root.appendChild(child2)
11
12subchild = doc.createElement("subchild")
13child2.appendChild(subchild)
14
15# 将 XML 文档转换为字符串
16xml_str = doc.toprettyxml(indent="  ")
17with open("output.xml", "w") as f:
18    f.write(xml_str)

2.3 查询 XML 文档

 

python

深色版本

1# 查询 XML 文档中的元素
2for node in root.childNodes:
3    if node.nodeType == node.ELEMENT_NODE:
4        print(node.tagName, node.attributes.items())
5
6# 查找具有特定属性的元素
7elements = doc.getElementsByTagName("child")
8for element in elements:
9    if element.getAttribute("attr") == "value":
10        print(element.firstChild.nodeValue)
11
12# 查找所有的 child 元素
13elements = doc.getElementsByTagName("child")
14for element in elements:
15    print(element.tagName)
16
17# 查找所有的子元素,包括子元素的子元素
18elements = doc.getElementsByTagName("subchild")
19for element in elements:
20    print(element.tagName)

2.4 修改 XML 文档

 

python

深色版本

1# 修改元素的文本
2element = doc.getElementsByTagName("child")[0]
3element.firstChild.nodeValue = "modified text"
4
5# 修改元素的属性
6element.setAttribute("attr", "new_value")
7
8# 删除元素
9root.removeChild(element)

2.5 保存修改后的 XML 文档

 

python

深色版本

1xml_str = doc.toprettyxml(indent="  ")
2with open("output.xml", "w") as f:
3    f.write(xml_str)

3. 使用第三方库 lxml

lxml 是一个强大的第三方库,它提供了比 ElementTree 更多的功能,支持 XPath 表达式,并且性能更好。lxml 的使用方法与 ElementTree 类似,但提供了更多的灵活性。

3.1 安装 lxml

 

bash

深色版本

1pip install lxml

3.2 解析 XML 文件

 

python

深色版本

1from lxml import etree
2
3# 解析 XML 文件
4tree = etree.parse('example.xml')
5root = tree.getroot()
6
7# 打印根节点的标签名
8print(root.tag)  # 输出 "root"

3.3 使用 XPath 查询 XML 文档

 

python

深色版本

1# 查询 XML 文档中的元素
2for elem in root.xpath('.//child'):
3    print(elem.tag)
4
5# 查找具有特定属性的元素
6for elem in root.xpath('.//child[@attr="value"]'):
7    print(elem.text)
8
9# 查找所有的子元素,包括子元素的子元素
10for elem in root.xpath('.//subchild'):
11    print(elem.tag)

总结

在 Python 中,解析 XML 文档可以通过多种方式实现,其中最常用的有 ElementTreeminidomlxmlElementTree 是一个轻量级的库,适用于大多数情况;minidom 基于 DOM 规范,提供了更多的对象模型特性;而 lxml 是一个功能强大的第三方库,提供了额外的功能如 XPath 支持和更好的性能。

无论你选择哪种方法,理解和掌握 XML 解析的基本操作,如读取、查询、修改和保存 XML 文档,都是非常重要的。这将帮助你在实际项目中更有效地处理 XML 数据。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值