python xml Python玩XML:SAX才是王道,DOM内存爆炸你怕不怕?
资深软件开发工程师业余马拉松选手。XML虽说比JSON要来得更加复杂些, 于Web里的应用也不像先前那般多了, 然而依旧存在着不少地方在使用它, 因此, 很有必要知悉怎样对XML进行操作。DOM vs SAX解析XML, 存在着两种办法, 分别是DOM以及SAX。DOM会将整个XML读进内存之中, 解析成为树, 所以占用内存大, 解析速度慢, 其优点是能够任意地遍历树的节点。SAX属于流模式, 一边读一边解析, 占用内存小, 解析速度快, 它的缺点是我们得自己去处理事件。正常情况下优先考虑SAX因为DOM实在太占内存。于其中运用SAX去解析XML极为简洁, 一般而言我们所关注的事件是, 这个, 以及, 这3个函数到位了, 过后如此便能够对xml予以解析了。举个例子当SAX解析器读到一个节点时a href/python a会产生3个事件事件在读取时事件在读取时事件在读取时。用代码实验一下from xml.parsers.expat import ParserCreate class DefaultSaxHandler(object): def start_element(self, name, attrs): print(sax:start_element: %s, attrs: %s % (name, str(attrs))) def end_element(self, name): print(sax:end_element: %s % name) def char_data(self, text): print(sax:char_data: %s % text) xml rPythonRuby handler DefaultSaxHandler() parser ParserCreate() parser.StartElementHandler handler.start_element parser.EndElementHandler handler.end_element parser.CharacterDataHandler handler.char_data parser.Parse(xml)应予以留意的是, 在读取一长串字符之时, 存在被多次调用的可能性, 故而需自行留存起来, 于其中再度整合。不是解析XML之外, 要怎样生成XML呢? 在大部分的情形下, 所需生成的XML结构算得上是极为简单的, 所以, 生成XML最简便且最有效的手段运用拼接字符串:L [] L.append(r ) L.append(r) L.append(encode(some data)) L.append(r) return .join(L)要是打算生成繁复的XML, 那该如何是好呢? 在此建议你千万别使用XML, 而是将其改成JSON。小结在对 XML 进行解析之际, 要留意去找出自身感兴趣的那些节点, 当响应事件之时, 需将节点数据予以保存, 在解析完成之后, 便能够对数据进行处理。练习请借助SAX进行程序编写, 以此来解析XML格式的天气预报, 进而获取天气预报:from xml.parsers.expat import ParserCreate from urllib import request def parseXml(xml_str): print(xml_str) return { city: ?, weather: { condition: Sunny, temperature: 37.2, wind: 9.7 } } # 测试: URL https://api.weatherapi.com/v1/current.xml?keyb4e8f86b44654e6b86885330242207qBeijingaqino with request.urlopen(URL, timeout4) as f: data f.read() result parseXml(data.decode(utf-8)) assert result[city] Beijing

相关新闻

Python与PyCharm专业版完整安装激活指南:从环境配置到教育许可

Python与PyCharm专业版完整安装激活指南:从环境配置到教育许可

这次我们来看一个 Python 和 PyCharm 的完整安装与激活方案。对于刚入门编程或者需要配置新环境的开发者来说,最头疼的往往不是写代码,而是第一步——如何把 Python 解释器和 PyCharm 这个强大的 IDE 正确、稳定地装好,并且能长期使用。网上教…

2026/10/15 2:36:07 阅读更多 →
【一看就会】【nav2源码解析系列】【第三篇】--【基础算法实现类】--【控制类】--nav2_dwb_controller模块

【一看就会】【nav2源码解析系列】【第三篇】--【基础算法实现类】--【控制类】--nav2_dwb_controller模块

文章目录前言一、包结构二、输入输出核心输入输出三、代码逻辑流程第一层:外层computeVelocityCommands第二层:内层computeVelocityCommands第一步:填 results 头部(可选):如果用户请求记录评估结果&#x…

2026/10/10 23:31:20 阅读更多 →
如何高效备份QQ空间:三步完成历史说说完整保存

如何高效备份QQ空间:三步完成历史说说完整保存

如何高效备份QQ空间:三步完成历史说说完整保存 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代,我们的记忆逐渐从纸质相册转移到社交媒体平台。QQ空间…

2026/10/9 4:45:26 阅读更多 →

最新新闻

uni-app 滚动渐变头部组件实现:自定义导航栏与跨端适配

uni-app 滚动渐变头部组件实现:自定义导航栏与跨端适配

很多做跨端项目的朋友应该都有同感:uni-app 里列表页的头部渐变是一个出现频率极高的需求。尤其首页、详情页,上面通常是一张大图或者品牌色背景,顶部导航栏一开始要透出背景,等用户往下滚一段距离后再慢慢变成纯色底、压住内容。…

2026/10/16 8:01:17 阅读更多 →
基于Spring Boot的图书馆预约信息管理系统开发实践

基于Spring Boot的图书馆预约信息管理系统开发实践

每到期末考试周,图书馆的座位就像早高峰的地铁一样抢手。早上六点半门口就排起长队,开门后大家直奔自习区,很多人先占个座再去吃早饭。问题是,有人拿一本书占着座,人却一整天不出现,真正想复习的同学反而找…

2026/10/16 8:01:17 阅读更多 →
free-claude-code实战:从零搭建本地AI编程助手工作流

free-claude-code实战:从零搭建本地AI编程助手工作流

先交代一个背景:我平时有一大半时间在处理重复代码、读历史 commit、给业务方解释某个模块为什么这么写。商业 AI 编程助手确实好用,但问题也很实际:一是订阅费并不便宜,二是公司内部代码外发这件事,总是让人睡不踏实。…

2026/10/16 8:01:17 阅读更多 →
修复后Bug再次复发?从数据同步任务看线上故障排查全流程

修复后Bug再次复发?从数据同步任务看线上故障排查全流程

Day01-09:修复BUG。凌晨3:24,监控告警群突然弹出红色消息,正在处理另一个故障的我放下手头的事,切到日志平台看了一眼——果然,又是那个任务。上一次修复是在当天下午部署的,也就是说间隔不到12小时&#x…

2026/10/16 8:01:16 阅读更多 →
理论力学竞赛课件:静力学到分析力学的完整推演与实战指南

理论力学竞赛课件:静力学到分析力学的完整推演与实战指南

简介:这份理论力学课件面向30周岁以下、准备参加全国周培源大学生力学竞赛等赛事的理工科学生,聚焦竞赛大纲中的重点与难点,帮助选手在有限时间内梳理知识框架、把握命题方向。资源包内含1个PPT文件,整体约731KB,以幻灯…

2026/10/16 8:01:16 阅读更多 →
深入解析损失函数:从MNIST分类任务彻底搞懂交叉熵

深入解析损失函数:从MNIST分类任务彻底搞懂交叉熵

1. 从“模型为什么学不会”说起:损失函数在MNIST任务里的真实角色很多人跑MNIST手写数字识别,代码一抄、模型一搭、训练一开,看到准确率能到95%以上就觉得万事大吉了。但如果你问他一句:你的模型到底在“学”什么?它凭…

2026/10/16 8:00:16 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →