当前位置: 首页 > news >正文

(21)100天python从入门到拿捏《XML 数据解析》 - 详解

XML 解析

一、XML 概述

1. 什么是 XML

XML(eXtensible Markup Language,可扩展标记语言) 是一种用于存储和传输数据的标记语言。它与 HTML 相似,但用途不同

2. XML 的发展历史

  • 1998 年:由万维网联盟正式发布 XML 1.0 标准。
  • 设计目标:在互联网早期解决不同系统之间数据交换的格式问题
  • 核心理念:让数据“自描述化”,即数据结构和内容都包含在文档中。
  • 现代替代者:JSON、YAML 等格式后来在网络开发中逐渐取代了部分 XML 的应用场景,但在企业系统、文档格式如 SVG、RSS、Office XML中仍被广泛使用。

3.XML、JSON和YAML语法对比

XML:基于标签的树结构,显式节点/属性,有文本节点、注释、处理指令。

<person id="123">
<name>张三</name>
<age>30</age>
</person>

JSON:键值对与数组,数据类型明晰。

{
"id": "123",
"name": "张三",
"age": 30
}

YAML:缩进表示层级,支持简短语法、序列及锚点,允许注释。

yaml目前是配置文件的主流

  • 容器与编排配置,定义服务拓扑、容器镜像、网络、工作流配置

  • 代理节点 / 网络配置,定义节点、策略组、路由规则

  • 机器学习与深度学习当中的模型结构、超参数、训练策略配置

  • 应用系统配置文件如Spring Boot 中的application.yml

  • 在AI 工程领域如 LlamaIndex、LangChain、均采用 YAML 描述链路

id: "123"
name: 张三
age: 30

二、XML 的应用场景

应用领域案例说明
企业数据交换SOAP、WSDLXML 是 Web Service 的数据载体
⚙️ 配置文件AndroidManifest.xml、Spring 配置结构化、层次分明
办公文件DOCX、XLSX、PPTX实际上都是 XML 的压缩包
数据订阅RSS、Atom新闻聚合和订阅系统
嵌入式/IoT硬件配置文件适用于多层嵌套配置

三、Python3 中的 XML 解析方式

Python 内置了多个用于解析 XML 的库,适用于不同复杂度的应用

模块类型特点适用场景
xml.etree.ElementTree内置库简单易用、轻量级小型 XML 文件解析
xml.dom.minidom内置库遵循 DOM 标准、内存消耗大需要完整文档结构时
xml.sax内置库事件驱动型解析、节省内存处理大型 XML 流
lxml第三方库性能高、支持 XPath、HTML企业级复杂解析

四、使用 xml.etree.ElementTree 解析 XML

初学推荐

xml.etree.ElementTree 是最常用的 XML 解析库,它将 XML 转换为树形结构,支持节点遍历、修改和写入。

操作student.xml文件

<?xml version="1.0"?><school><student id="001"><name>张三</name><age>20</age><major>Computer Science</major></student><student id="002"><name>李四</name><age>22</age><major>Data Science</major></student></school>

1. 解析并读取节点

import xml.etree.ElementTree as ET
# 解析XML文件
tree = ET.parse('student.xml')
root = tree.getroot()  # 获取根节点
# 输出根节点名称
print("根节点:", root.tag)
# 遍历所有子节点
for student in root.findall('student'):
sid = student.get('id')
name = student.find('name').text
age = student.find('age').text
major = student.find('major').text
print(f"学号: {sid}, 姓名: {name}, 年龄: {age}, 专业: {major}")
输出结果:

在这里插入图片描述

五、使用 minidom解析 XML

xml.dom.minidom 提供了标准 Document Object Model接口,适合需要修改、插入、删除节点的复杂文档。

from xml.dom.minidom import parse
dom = parse('student.xml')
root = dom.documentElement
students = root.getElementsByTagName("student")
for s in students:
sid = s.getAttribute("id")
name = s.getElementsByTagName("name")[0].firstChild.data
print(f"学号:{sid} 姓名:{name}")

输出:
在这里插入图片描述

六、使用 lxml 实现高级解析

这是企业级应用

lxml 是一个高性能的 XML/HTML 解析库,支持 XPath、XSLT、Schema 校验 等高级功能。

from lxml import etree
# 解析XML
tree = etree.parse('student.xml')
root = tree.getroot()
# 使用XPath查询
names = root.xpath("//student/name/text()")
print("所有学生姓名:", names)
# 查询特定条件
students = root.xpath("//student[age>20]/name/text()")
print("年龄>20的学生:", students)

输出:

在这里插入图片描述

七、生成 XML 文件

这里的创建是从零创建

import xml.etree.ElementTree as ET
root = ET.Element('library')
book = ET.SubElement(root, 'book', {'id': '001'})
ET.SubElement(book, 'title').text = 'Python编程'
ET.SubElement(book, 'author').text = 'Guido van Rossum'
tree = ET.ElementTree(root)
tree.write('library.xml', encoding='utf-8', xml_declaration=True)

生成结果:

在这里插入图片描述

八、XML 与 JSON 的比较

特性XMLJSON
数据结构树状结构键值对结构
可读性可读性高但冗余简洁清晰
扩展性强,支持属性与命名空间
传输体积
典型用途WebService、配置文件API 数据传输

在现代 Web 开发中,JSON 更轻量、解析更快,但在需要复杂层次结构和元信息如属性、命名空间的系统中,XML 仍具优势

python学习专栏导航
(1)100天python从入门到拿捏《Python 3简介》
(2)100天python从入门到拿捏《python应用前景》
(3)100天python从入门到拿捏《数据类型》
(4)100天python从入门到拿捏《运算符》
(5)100天python从入门到拿捏《流程控制语句》
(6)100天python从入门到拿捏《推导式》
(7)100天python从入门到拿捏《迭代器和生成器》
(8)100天python从入门到拿捏《函数和匿名函数》
(9)100天python从入门到拿捏《装饰器》
(10)100天python从入门到拿捏《Python中的数据结构与自定义数据结构》
(11)100天python从入门到拿捏《模块》
(12)100天python从入门到拿捏《文件操作》
(13)100天python从入门到拿捏《目录操作》
(14)100天python从入门到拿捏《Python的错误与异常机制》
(15)100天python从入门到拿捏《面向对象编程》
(16)100天python从入门到拿捏《标准库》
(17)100天python从入门到拿捏《正则表达式》
(18)100天python从入门到拿捏《网络编程》
(19)100天python从入门到拿捏《多线程》
(20)100天python从入门到拿捏《JSON 数据解析》

http://www.gsyq.cn/news/50434.html

相关文章:

  • 管理者的三种境界
  • UI设计公司审美积累|APP界面从风格到功能的设计智慧
  • 2025留学生名企内推认准谁?2025全球500强内推实力机构TOP5榜单,学业就业规划一体化服务机构推荐
  • 搬家平台推荐丨AI赋能国内搬家新体验 2025年三大优选搬家公司平台引领行业变革
  • 2025 年 11 月山东实验室净化建设,万级山东实验室净化,高校山东实验室净化最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • 【PlotNeuralNet】pycharm中运行为什么一定要用 文件名.py,而不能 .\路径\文件名.py?
  • 2025年90度尖角精致钢生产厂家权威推荐榜单:合金精致钢/精密焊接精致钢/90度精致钢源头厂家精选
  • 解锁Android手机
  • OpenCVSharp:使用 MOG(Mixture of Gaussians,高斯混合模型)算法来从视频流中分离前景和背景
  • STM32 中的 printf
  • 2025年国内有实力的智能家居品牌综合评估与选择指南
  • 2025年潜水泵优质厂家权威推荐榜单:小型抽水泵/深井潜水泵/电动水泵源头厂家精选
  • 2025 年三丰影像仪经销商最新推荐排行榜:权威测评原装正品供应商、经销商及代理商,精准匹配精密制造检测需求三丰圆度仪/三丰物镜/三丰(Mitutoyo)/三丰精密量仪供应商推荐
  • 浅谈 SOS DP
  • 第三章作业
  • 腹泻与脱水
  • 2025年烘焙乳化剂定做厂家权威推荐榜单:保健品原料/稳定剂/制酶剂源头厂家精选
  • 【git 学习】-b v5.4.1 --recursive是什么意思
  • 2025年玻璃防霉纸厂家权威推荐榜单:铝板衬纸/晶圆隔离纸/电池片隔离纸源头厂家精选
  • 2025年陶瓷密封环圆台平面磨床批发厂家权威推荐榜单:陶瓷密封筒磨削圆台平面磨床/纸管圆刀片圆台平面磨床/包装材料圆刀片圆台平面磨床源头厂家精选
  • 2025年二氧化碳气体膨胀爆破实力厂家权威推荐榜单:气体爆破原理/气体膨胀爆破/气体爆破源头厂家精选
  • 2025年智慧客房系统供应商权威推荐榜单:行业领军企业深度解析
  • load_balance函数代码详解
  • AI 应用开发新选择:JBoltAI 框架适配 Java 生态,无缝集成现有项目
  • 题解:P14508 猜数游戏 guess
  • Why blog today
  • 从架构到体验:友猫社区平台的全栈便捷的技术解析与作用体系详解
  • 2025辽宁网络推广品牌最新TOP5评测推荐:赋能品牌增长新引擎
  • 用户数据采集实验软件
  • 算法第三章作业