Python 如何创建和解析 XML 文件

XML(可扩展标记语言)是一种广泛使用的标记语言,主要用于存储和传输数据。它具有结构化、层次化的特点,常被用作数据交换格式。Python 提供了多种工具和库来处理 XML 文件,包括创建、解析和操作 XML 文档。

一、XML 简介

XML 是一种用于描述结构化数据的标记语言,其设计目的是让人和机器都可以轻松读取和处理数据。一个典型的 XML 文件由多个嵌套的元素组成,每个元素都有一个开始标签和一个结束标签,中间包含数据或其他元素。

例如,一个简单的 XML 文件可能是这样的:

<bookstore><book><title>Python Programming</title><author>John Doe</author><price>29.99</price></book><book><title>Learning XML</title><author>Jane Doe</author><price>39.95</price></book>
</bookstore>

在这个示例中,<bookstore> 是根元素,它包含了两个 <book> 元素,每个 <book> 元素包含三个子元素:<title><author><price>

二、在 Python 中创建 XML 文件

Python 提供了多种方法来创建 XML 文件,常用的方法包括使用 xml.etree.ElementTree 模块和 minidom 模块。

1. 使用 xml.etree.ElementTree 创建 XML 文件

xml.etree.ElementTree 是 Python 标准库中的一个模块,用于生成和解析 XML。我们可以使用它轻松创建一个 XML 文档。

以下是一个使用 ElementTree 创建 XML 文件的示例:

import xml.etree.ElementTree as ET# 创建根元素
root = ET.Element("bookstore")# 创建第一个书籍元素
book1 = ET.SubElement(root, "book")
title1 = ET.SubElement(book1, "title")
title1.text = "Python Programming"
author1 = ET.SubElement(book1, "author")
author1.text = "John Doe"
price1 = ET.SubElement(book1, "price")
price1.text = "29.99"# 创建第二个书籍元素
book2 = ET.SubElement(root, "book")
title2 = ET.SubElement(book2, "title")
title2.text = "Learning XML"
author2 = ET.SubElement(book2, "author")
author2.text = "Jane Doe"
price2 = ET.SubElement(book2, "price")
price2.text = "39.95"# 创建 XML 树结构
tree = ET.ElementTree(root)# 将 XML 树写入文件
tree.write("bookstore.xml", encoding="utf-8", xml_declaration=True)

在这个示例中,我们首先创建了一个根元素 <bookstore>,然后为每本书创建了一个 <book> 元素,并为每本书添加了 <title><author><price> 子元素。最后,我们使用 ElementTree.write 方法将 XML 树保存到文件中。

2. 使用 minidom 创建 XML 文件

minidom 是一个用于处理 XML 的轻量级 DOM 实现,可以让我们更灵活地操作 XML 文档。

以下是一个使用 minidom 创建 XML 文件的示例:

from xml.dom.minidom import Document# 创建文档对象
doc = Document()# 创建根元素
root = doc.createElement("bookstore")
doc.appendChild(root)# 创建第一个书籍元素
book1 = doc.createElement("book")
root.appendChild(book1)title1 = doc.createElement("title")
title1.appendChild(doc.createTextNode("Python Programming"))
book1.appendChild(title1)author1 = doc.createElement("author")
author1.appendChild(doc.createTextNode("John Doe"))
book1.appendChild(author1)price1 = doc.createElement("price")
price1.appendChild(doc.createTextNode("29.99"))
book1.appendChild(price1)# 创建第二个书籍元素
book2 = doc.createElement("book")
root.appendChild(book2)title2 = doc.createElement("title")
title2.appendChild(doc.createTextNode("Learning XML"))
book2.appendChild(title2)author2 = doc.createElement("author")
author2.appendChild(doc.createTextNode("Jane Doe"))
book2.appendChild(author2)price2 = doc.createElement("price")
price2.appendChild(doc.createTextNode("39.95"))
book2.appendChild(price2)# 将 XML 文档写入文件
with open("bookstore_minidom.xml", "w", encoding="utf-8") as f:f.write(doc.toprettyxml(indent="  "))

在这个示例中,我们使用 minidom 来创建 XML 文档。与 ElementTree 相比,minidom 提供了更多的控制,可以方便地格式化输出(如缩进和换行)。

三、在 Python 中解析 XML 文件

解析 XML 文件是指读取 XML 文件并提取所需数据。Python 提供了多种方法来解析 XML 文件,包括 xml.etree.ElementTreeminidom 以及 xml.sax 等模块。

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

ElementTree 模块不仅可以创建 XML 文件,还可以用来解析 XML 文件。以下是一个简单的解析示例:

import xml.etree.ElementTree as ET# 解析 XML 文件
tree = ET.parse('bookstore.xml')
root = tree.getroot()# 遍历根元素的子元素
for book in root.findall('book'):title = book.find('title').textauthor = book.find('author').textprice = book.find('price').textprint(f"Title: {title}, Author: {author}, Price: {price}")

在这个示例中,我们使用 ElementTree.parse 方法解析 XML 文件,并通过 getroot 方法获取根元素。接着,我们使用 findall 方法遍历所有的 <book> 元素,并提取其中的 <title><author><price> 元素的文本内容。

2. 使用 minidom 解析 XML 文件

minidom 模块也可以用来解析 XML 文件。以下是一个示例:

from xml.dom.minidom import parse# 解析 XML 文件
doc = parse('bookstore_minidom.xml')# 获取所有的书籍元素
books = doc.getElementsByTagName("book")# 遍历每本书
for book in books:title = book.getElementsByTagName("title")[0].childNodes[0].dataauthor = book.getElementsByTagName("author")[0].childNodes[0].dataprice = book.getElementsByTagName("price")[0].childNodes[0].dataprint(f"Title: {title}, Author: {author}, Price: {price}")

在这个示例中,我们使用 minidom.parse 方法解析 XML 文件,并使用 getElementsByTagName 方法获取所有的 <book> 元素。然后,我们从每个 <book> 元素中提取出 <title><author><price> 元素的文本内容。

3. 使用 xml.sax 解析 XML 文件

xml.sax 是 Python 中处理 XML 的另一种方式,它是基于事件驱动的解析方式,适合处理大型 XML 文件。sax 的工作原理是通过事件(如开始元素、结束元素、字符数据等)来解析 XML。

以下是一个使用 xml.sax 解析 XML 文件的示例:

import xml.saxclass BookHandler(xml.sax.ContentHandler):def __init__(self):self.currentData = ""self.title = ""self.author = ""self.price = ""# 元素开始事件处理def startElement(self, tag, attributes):self.currentData = tag# 元素结束事件处理def endElement(self, tag):if self.currentData == "title":print(f"Title: {self.title}")elif self.currentData == "author":print(f"Author: {self.author}")elif self.currentData == "price":print(f"Price: {self.price}")self.currentData = ""# 内容事件处理def characters(self, content):if self.currentData == "title":self.title = contentelif self.currentData == "author":self.author = contentelif self.currentData == "price":self.price = content# 创建一个 XMLReader
parser = xml.sax.make_parser()# 关闭命名空间
parser.setFeature(xml.sax.handler.feature_namespaces, 0)# 重写 ContentHandler
Handler = BookHandler()
parser.setContentHandler(Handler)parser.parse("bookstore.xml")

在这个示例中,我们定义了一个 BookHandler 类,它继承自 xml.sax.ContentHandler。这个类中包含了三个主要的方法:startElementendElementcharacters,它们分别在元素开始、元素结束和处理元素内容时被调用。通过 xml.sax.make_parser 创建解析器并设置内容处理器后,可以使用 parser.parse 方法来解析 XML 文件。

在 Python 中处理 XML 文件有多种方法,包括 xml.etree.ElementTreeminidomxml.sax 等。这些方法各有优劣,ElementTreeminidom 更适合小型 XML 文档的创建和解析,而 xml.sax 则适合处理大型 XML 文档。通过这些工具,可以方便地创建、读取和操作 XML 文件,为数据的存储和交换提供了有力的支持。

在实际应用中,选择合适的工具取决于具体的需求和场景。例如,如果需要快速创建和解析 XML 文件,ElementTree 是一个很好的选择;如果需要处理大型 XML 文件,xml.sax 可能更为合适。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/402951.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu24.04使用SRS 搭建 RTMP流媒体服务器

一、简介 SRS(Simple Realtime Server)是一个简单高效的实时视频服务器&#xff0c; 是国人写的一款非常优秀的开源流媒体服务器软件&#xff0c;可用于直播/录播/视频客服等多种场景&#xff0c;其定位是运营级的互联网直播服务器集群。支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28…

手撕C++入门基础

1.C介绍 C课程包括&#xff1a;C语法、STL、高阶数据结构 C参考文档&#xff1a;Reference - C Reference C 参考手册 - cppreference.com cppreference.com C兼容之前学习的C语言 2.C的第一个程序 打印hello world #define _CRT_SECURE_NO_WARNINGS 1 // test.cpp // …

甄选系列“论软件开发过程RUP及其应用”,软考高级论文,系统架构设计师论文

论文真题 RUP(Rational Unified Process)是IBM公司的一款软件开发过程产品,它提出了一整套以UML为基础的开发准则,用以指导软件开发人员以UML为基础进行软件开发。RUP汲取了各种面向对象分析与设计方法的精华,提供了一个普遍的软件过程框架,可以适应不同的软件系统、应用…

http request-02-Ajax XHR 的替代方案-fetch 标准

http 请求系列 http request-01-XMLHttpRequest XHR 简单介绍 http request-01-XMLHttpRequest XHR 标准 Ajax 详解-01-AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;入门介绍 Ajax XHR 的替代方案-fetch Ajax XHR 的替代方案-fetch 标准 Ajax 的替代方案…

06、stm32 引脚输入

一、配置 二、代码 /* USER CODE BEGIN WHILE */while (1){/** 引脚默认上拉 高电平 按键按下 读取到低电平* */if(HAL_GPIO_ReadPin(GPIOB,KEY_Pin) GPIO_PIN_RESET ){HAL_Delay(20);if(HAL_GPIO_ReadPin(GPIOB,KEY_Pin) GPIO_PIN_RESET ){HAL_GPIO_TogglePin(GPIOC,LED_P…

【C++】智能指针详解

一、从new和delete谈起 在C中&#xff0c;可以使用new和delete关键字进行对象的创建和销毁&#xff0c;new一个对象实际上是在堆上分配内存&#xff0c;而new出来的对象也要自己用delete释放&#xff0c;从而回收内存&#xff0c;否则会造成内存的泄露。由程序员自己new来分配…

修改mf后缀的文件为zip(仅修改文件后缀,并非通过压缩解压的方式修改实际的文件)

仅修改文件后缀的python实现 1、以下代码仅简单的修改mf后缀的文件为zip&#xff0c;并非通过压缩解压的方式修改实际的文件。 2、执行后原有mf后缀的文件直接转换为zip的后缀&#xff0c;请注意备份。 &#xff08;注意&#xff1a;如果rar或者tar转成zip&#xff0c;请使用解…

机器学习/自主系统与亚当·斯密

人工智能中的机器学习和自主系统是当前科技领域的热门话题&#xff0c;它们与亚当斯密的经济学理论之间可能存在一些潜在的联系和启示。亚当斯密的经济学理论主要关注市场经济的运行和资源分配。他的核心观点是&#xff0c;通过市场机制的作用&#xff0c;个体追求自身利益的行…

前端框架(三件套)

学习网站 HTML 系列教程&#xff08;有广告&#xff09; HTML&#xff08;超文本标记语言&#xff09; | MDN (mozilla.org)&#xff08;英文不太友好&#xff09; 1.HTML5 & CSS3 1.1HTML5表格 <!DOCTYPE html> <html lang"en"> <head>…

李宏毅 机器学习与深度学习【2022版】 01

文章目录 一、基本概念二、深度学习内容总览三、预测YouTube播放量的模型1、假设一个含有未知参数的函数式2、根据Training Data定义一个 Loss3、最优化Optimization4、测试集验证模型性能5、线性模型特征维度提升6、非线性模型7、ReLU 四、深度学习概述1、Fully Connect Feedf…

边缘计算技术解决行业痛点,TSINGSEE智能分析网关V4技术特点与应用场景解析

一、行业背景 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;边缘计算硬件作为其核心组成部分&#xff0c;正逐步成为市场的新宠。这些硬件不仅提升了数据处理和分析的效率&#xff0c;还极大地降低了数据传输的延迟&#xff0c;为各行各业的智能化转型提…

Unity | 游戏开发中的优化思维

目录 ​​​​​​一、优化三板斧&#xff1a; 第1步&#xff1a;定标准 第2步&#xff1a;重数据 第3步&#xff1a;严测试 二、流程和性能的优化 1.定标准&#xff1a; 2.重数据&#xff1a; 三、交互和表现的优化 1.卡顿和延迟 2.手感硬 四、沟通和学习 ​​​​…

string模拟

本章准备对string模拟进行讲解&#xff0c;以下是string的学习网址&#xff1a; string - C Reference (cplusplus.com) string本质可以理解为储存char类型的顺序表&#xff0c;其中string的迭代器用一个char*就可以解决。所以string类成员变量如下&#xff1a; 这里用了一个命…

普通人如何抓住AI这个风口?

最强AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ AI不仅仅是提升办公效率的利器&#xff0c;更是普通人目前最容易上手和变现的工具&#xff01;对于风口&#xff0c;大家应该都听…

使用yolov5实现目标检测简单案例(测试图片)

一、前置 测试这个案例之前需要安装一些前置的东西&#xff0c;如果已经安装的可以忽略&#xff0c;下面我给出我跟着做的一些很好的博客提供大家参考&#xff0c;因为我们主要目的还是实现yolov5的目标检测。 1、安装nvidia显卡驱动 可以参考&#xff1a;【Windows】安装NV…

Unified 阻抗控制 architecture、framework、approach

Unified 阻抗控制&#xff08;Unified Impedance Control&#xff09;作为一种控制策略&#xff0c;其architecture&#xff08;架构&#xff09;、framework&#xff08;框架&#xff09;和approach&#xff08;方法&#xff09;为&#xff1a; 一、Unified 阻抗控制 Archite…

京东数据编织

计算引擎是Hbase 中间计算结果的物化【就是存下来】 自动物化 在这里插入图片描述

Python自动化:解锁高效工作与生产力的密钥

在当今快节奏的数字时代&#xff0c;自动化已成为提升工作效率、优化流程、减少人为错误的不可或缺的工具。Python&#xff0c;作为一种功能强大、易于学习且应用广泛的编程语言&#xff0c;在自动化领域扮演着举足轻重的角色。无论是数据处理、Web自动化、软件测试&#xff0c…

SQL注入(原理、分类、union、POST注入)

目录 【学习目标、重难点知识】 【学习目标】 【重难点知识】 SQL注入简介 SQL注入原理 SQL注入类型 MySQL与SQL注入的相关知识 information_schema 数据库的结构 数据库查询语句 limit的用法 需要记住的几个函数 注释符号 SQL注入探测方法 SQL注入漏洞攻击流程…

ssh免密码登陆设置时Authentication refused: bad ownership or modes错误解决方法

0.环境&#xff1a; 三个节点&#xff1a;node1,node2,node3 1.问题描述&#xff1a; 配置好免密登录后&#xff0c;免密登录失效&#xff0c;还需要输入密码&#xff0c;如下图&#xff1a; 2.原因查找&#xff1a; 去查看系统的日志文件 使用命令&#xff1a; sudo tail …