Python基础教程(二十二):XML解析

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
💝💝💝如有需要请大家订阅我的专栏【Python系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

文章目录

    • 引言
    • 一、XML基础
    • 二、使用ElementTree解析XML
      • 2.1 加载XML文档
      • 2.2 遍历XML文档
      • 2.3 查找特定元素
      • 2.4 修改XML文档
      • 2.5 创建XML文档
    • 三、案例分析之从XML文件中提取数据
    • 四、性能与高级用法
    • 五、总结
    • 结束语

引言

XML(eXtensible Markup Language),一种标记语言,常用于数据存储和交换。Python提供了多种库来解析和处理XML文档,如xml.etree.ElementTreelxmlxml.dom.minidom。本文将深入讲解如何使用Python的xml.etree.ElementTree库来解析和操作XML文档,通过具体案例帮助你掌握这一技能。

一、XML基础

XML文档由元素、属性和文本组成。元素由标签名定义,可以包含子元素和属性。一个典型的XML文档如下所示:

<catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer'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 元素 -->
</catalog>

二、使用ElementTree解析XML

xml.etree.ElementTree是Python标准库的一部分,提供了一种快速、灵活的方式来解析和创建XML文档。

2.1 加载XML文档

import xml.etree.ElementTree as ET# 解析XML文件
tree = ET.parse('books.xml')
root = tree.getroot()

2.2 遍历XML文档

# 遍历所有book元素
for book in root.findall('book'):title = book.find('title').textauthor = book.find('author').textprint(f"Title: {title}, Author: {author}")

2.3 查找特定元素

# 查找所有标题中含有'Guide'的书籍
for book in root.findall(".//book[title='XML Developer's Guide']"):print(book.attrib)

2.4 修改XML文档

# 修改某本书的价格
for book in root.findall('book'):if book.attrib['id'] == 'bk101':new_price = book.find('price')new_price.text = '49.95'new_price.set('updated', 'yes')# 写回XML文件
tree.write('books.xml')

2.5 创建XML文档

# 创建一个新的XML文档
root = ET.Element("catalog")
book = ET.SubElement(root, "book", attrib={"id": "bk101"})
ET.SubElement(book, "author").text = "Gambardella, Matthew"
ET.SubElement(book, "title").text = "XML Developer's Guide"
ET.SubElement(book, "genre").text = "Computer"
ET.SubElement(book, "price").text = "44.95"
ET.SubElement(book, "publish_date").text = "2000-10-01"
ET.SubElement(book, "description").text = "An in-depth look at creating applications with XML."# 将新文档写入文件
tree = ET.ElementTree(root)
tree.write('new_books.xml')

三、案例分析之从XML文件中提取数据

假设我们有一个包含图书信息的XML文件,目标是从文件中提取所有书籍的作者和出版日期。

import xml.etree.ElementTree as ET# 解析XML文件
tree = ET.parse('books.xml')
root = tree.getroot()# 提取数据
authors = []
publish_dates = []
for book in root.findall('book'):author = book.find('author').textpublish_date = book.find('publish_date').textauthors.append(author)publish_dates.append(publish_date)# 打印结果
print("Authors:", authors)
print("Publish Dates:", publish_dates)

四、性能与高级用法

虽然xml.etree.ElementTree库足够用于大多数情况,但对于大型XML文件,你可能需要考虑使用lxml库,它提供了更好的性能和额外的功能,如XPath支持。

五、总结

Python的xml.etree.ElementTree库提供了一套简单而强大的工具集,用于解析、操作和创建XML文档。通过本文的学习,你应该能够处理基本的XML文件操作。在实际项目中,根据需求选择合适的库和方法,可以让你更加高效地处理XML数据。不断练习和探索,你将能够掌握更多高级技巧,处理更复杂的XML文档和数据结构。


结束语

喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
打赏下吧

💝💝💝如有需要请大家订阅我的专栏【Python系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

python相关文章索引文章链接
Python基础语法(一):标识符与保留字部分Python基础语法(一):标识符与保留字部分
Python基础语法(二):数据类型Python基础语法(二):数据类型
Python基础语法(三):运算符Python基础语法(三):运算符
Python基础语法(四):条件控制Python基础语法(四):条件控制
Python基础语法(五):循环语句Python基础语法(五):循环语句
Python基础语法(六):推导式编程Python基础语法(六):推导式编程
Python基础教程(七):函数编程-从基础到进阶Python基础教程(七):函数编程-从基础到进阶
Python基础教程(八):迭代器与生成器编程Python基础教程(八):迭代器与生成器编程
Python基础教程(九):Lambda 函数Python基础教程(九):Lambda 函数
Python基础教程(十):装饰器Python基础教程(十):装饰器
Python基础教程(十一):数据结构汇总梳理Python基础教程(十一):数据结构汇总梳理
Python基础教程(十二):模块Python基础教程(十二):模块
Python基础教程(十三):file文件及相关的函数Python基础教程(十三):file文件及相关的函数
Python基础教程(十四):OS 文件/目录方法Python基础教程(十四):OS 文件/目录方法
Python基础教程(十五):面向对象编程Python基础教程(十五):面向对象编程
Python基础教程(十六):正则表达式Python基础教程(十六):正则表达式
Python基础教程(十七):CGI编程Python基础教程(十七):CGI编程
Python基础教程(十八):MySQL - mysql-connector 驱动Python基础教程(十八):MySQL - mysql-connector 驱动
Python基础教程(十九):网络编程Python基础教程(十九):网络编程
Python基础教程(二十):SMTP发送邮件Python基础教程(二十):SMTP发送邮件
Python基础教程(二十一):多线程Python基础教程(二十一):多线程

❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

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

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

相关文章

揭秘newSingleThreadExecutor:深度解析与源码探秘

1. 概述 newSingleThreadExecutor是Java线程池框架中Executors类的一个静态方法,它返回一个线程池实例,该线程池维护一个单一的工作线程来执行任务。这个线程池的特性在于它保证了所有提交的任务会按照它们在队列中的顺序依次执行,而不会并发执行。它适用于需要保证任务顺序…

0 算法复杂度

算法复杂度 时间复杂度有关总结 一&#xff0c;常数时间的操作【基本操作】 常数时间——固定时间——O&#xff08;1&#xff09;——由实现细节决定 不会随着输入规模的变化而增加时间复杂度 1 基本操作解析 1.算数操作: ab a-b a*b a/b int a 32位 int b 32位11 178997…

Linux--MQTT(二)通信基本原理

一、MQTT 通信基本原理 MQTT 是一种基于 客户端 - 服务端 架构的消息传输协议&#xff0c;所以在 MQTT 协议通信中&#xff0c;有两个最为重要的角色&#xff0c;它们便是服务端 和 客户端 。 举例&#xff1a;若开发板向“芯片温度”这一主题发布消息&#xff0c;那么服务…

cocos开发的时候 wx.onShow在vscode里面显示红色

这个函数是在微信小游戏平台才会用到。 cocos识别不到wx这个变量。 可以改成下面的写法。 只要在变量前面加一个globalThis.就能识别这个变量了。也不报错了。 搞死强迫症了。orz 欢迎大家来玩我的微信小游戏。多多提意见啊。

欧阳修,仕途波澜中的文坛巨匠

欧阳修&#xff0c;字永叔&#xff0c;号醉翁、六一居士&#xff0c;生于北宋真宗景德四年&#xff08;公元1007年&#xff09;&#xff0c;卒于北宋神宗熙宁五年&#xff08;公元1072年&#xff09;&#xff0c;享年65岁。他是北宋时期著名的文学家、史学家&#xff0c;也是唐…

计算机缺失d3dcompiler_43.dll怎么办,介绍5种靠谱的解决方法

在电脑使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到d3dcompiler43.dll”的错误。那么&#xff0c;d3dcompiler43.dll到底是什么&#xff1f;为什么会出现丢失的情况&#xff1f;它对计算机有什么具体影响&#xff1f;如何解决这个问题&a…

数据库系统概念(第七周 第二堂)(E-R模型转关系模式)

前言 前一堂课我们深入研究了E-R模型的画法和要点&#xff0c;学习E-R模型肯定是为了给数据库表格设计提供帮助。数据库表格设计就是关系模式设计&#xff0c;数据库表就是关系模式的实例化。所以本堂课&#xff0c;我们来看E-R模型如何转为关系模式。 转化原则 转化步骤 转…

23级《面向对象程序设计》模拟测试

1-1-1 构造函数在创建类对象时自动调用执行。 T F | 参考答案 答案 T 1-1-2 派生类对象不可以直接访问基类的私有成员。 T F | 参考答案 答案 T 1-1-3 抽象类是指包含纯虚函数的类。 T F | 参考答案 答案 T 1-1-4 类的析构函数可以重载。 T F | 参考答案 答案 F 1-1-5 C中所有的…

[Vulnhub]Solid-State POP3邮件服务(James)+rbash逃逸

信息收集&SSH Server IP addressPorts Open192.168.8.100TCP:22,25,80,110,119,4555 Nmap 扫描: $ nmap -p- 192.168.8.100 --min-rate 1000 -sC -sV 结果: Host is up (0.00061s latency). Not shown: 65529 closed tcp ports (conn-refused) PORT STATE SERVICE…

RK3588开发板中使用Qt对zip文件进行解压

操作步骤&#xff1a; 下载源码quazip-0.7.3.zip &#xff0c;在网上找找下载地址上传源码进行解压&#xff0c;然后使用命令 cd quazip-0.7.3 qmake make主要用的是quazip-0.7.3/quazip这个里面的源码&#xff0c;然后把源码加入到自己创建的qt项目pro中&#xff0c;导入方式…

phpStudy安装sqli-labs

phpStudy安装sqli-labs git地址&#xff1a;https://github.com/Audi-1/sqli-labs 点击管理–>根目录 将git下载的sqli-labs文件放进去并解压 进入sql-connections修改 修改db-creds.inc文件为自己数据库的账号密码 更改php版本为5.*&#xff0c;因为这个程序只能在php 5.…

[Golang] go-kit 介绍和使用 (微服务实现工具)

文章目录 1.go-kit 介绍1.1 go-kit 三层结构 2.go-kit 实例 1.go-kit 介绍 go-kit是一个分布式的开发工具集&#xff0c;在大型的组织&#xff08;业务&#xff09;中可以用来构建微服务&#xff0c;其解决了分布式系统中大多数常见问题&#xff0c;因此&#xff0c;使用者可以…

Paragon NTFS for Mac 15软件下载-详细安装教程视频

​Paragon NTFS for Mac是Mac平台上一款非常优秀的读写工具&#xff0c;可以在Mac OS X中完全读写、修改、访问NTFS硬盘、U盘等外接设备的文件。这款软件最大的亮点简书可以让我们读写 NTFS 分区&#xff0c;因为在Mac OS X 系统上&#xff0c;默认状态下我们只能读取NTFS 分区…

Java Arrays 类的常用方法详解

Arrays 类是 Java 标准库中的一个实用工具类&#xff0c;提供了许多静态方法来操作数组。其中一些方法在日常开发中使用频率较高。以下是一些在实际开发中最常用的方法&#xff1a; 1. toString 方法 将数组转换为字符串表示。 int[] array {1, 2, 3, 4, 5}; System.out.pr…

Spring-kafka消费者消费的一些问题

前言 Spring Kafka 无缝集成了 Spring Boot、Spring Framework 及其生态系统中的其他项目&#xff0c;如 Spring Cloud。通过与 Spring Boot 的自动配置结合&#xff0c;开发者可以快速启动和配置 Kafka 相关的功能。无需编写大量样板代码即可实现 Kafka 的生产和消费功能&…

Arm平台编译linuxdeployqt

在网上看了一下网友的分享&#xff0c;这个linuxdeployqt工具主要是用来打包qt程序的&#xff0c;但是程序不支持arm平台&#xff0c;需要下载源码编译才能用&#xff0c;自己测试了一下成功了&#xff0c;记录分享一下 操作步骤&#xff1a; 去下载源码&#xff1a;源码下载我…

揭开 Docker 容器的神秘面纱:深入理解容器原理

前言 前几年比较火的是微服务&#xff0c;再然后就是云。讨论技术必谈微服务&#xff0c;要上云&#xff0c;开发出的产品也都是某某云。现在讨论比较少了&#xff0c;因为AI盖过他们。还有就是因为容器技术&#xff0c;现在几乎都是k8s&#xff0c;云原生。要比较快的上手k8s…

HCIP笔记(拖拽题)

1、接口安全保护动作的名称和操作对应关系&#xff1a; 1&#xff09;restrict&#xff1a;丢弃触发静态MAC地址漂移的报文&#xff0c;并上报告警&#xff1b; 2&#xff09;protect&#xff1a;只丢弃触发触发静态MAC地址漂移的报文&#xff0c;不上报告警&#xff1b; 3&…

【源码】16国语言交易所源码/币币交易+期权交易+秒合约交易+永续合约+交割合约+新币申购+投资理财/手机端uniapp纯源码+PC纯源码+后端PHP

测试环境&#xff1a;Linux系统CentOS7.6、宝塔面板、Nginx、PHP7.3、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态laravel5&#xff0c;开启ssl证书 语言&#xff1a;16种&#xff0c;看图 这套带前端uniapp纯源码&#xff0c;手机端和pc端都有纯源码&#xff0c;后…

【C++】 基础复习 | 数据类型,输入,输出流 scanf printf

文章目录 1 基本数据类型1.1 基本数据类型1.2 构造类型1.3 指针类型&#xff08;Pointers&#xff09; 2 基础输入输出2.1 通过输入输出操作符>> <<2.2 通过scanf和printf输入和输出2.2.1 输出printf 函数2.2.2 输出scanf 函数2.2.3 注意事项 1 基本数据类型 了解…