快速导航×

Python怎么解析XML文件_Python解析XML文件的几种方法2025-11-03 20:56:02
ElementTree适合中小型文件解析,SAX适用于大文件,lxml功能强大支持XPath,可按需选择。

python怎么解析xml文件_python解析xml文件的几种方法

Python 提供了多种方式来解析 XML 文件,选择哪种方法主要取决于文件大小、操作习惯以及是否需要修改 XML 内容。下面介绍几种常用的 XML 解析方法:DOM、SAX、ElementTree 和 lxml。

1. 使用 xml.etree.ElementTree(推荐初学者)

ElementTree 是 Python 标准库中的模块,简单易用,适合处理中小型 XML 文件。它将整个 XML 加载到内存中,以树形结构表示,便于遍历和查找。

示例 XML 文件(data.xml):



  
    Alice
    22
  

  
    Bob
    24
  

使用 ElementTree 解析:

import xml.etree.ElementTree as ET

tree = ET.parse('data.xml')
root = tree.getroot()

for student in root.findall('student'):
  sid = student.get('id')
  name = student.find('name').text
  age = student.find('age').text
  print(f"ID: {sid}, Name: {name}, Age: {age}")

优点:语法简洁,支持 XPath 子集,无需额外安装。适合读取和构建简单 XML。

2. 使用 SAX(适用于大文件)

SAX(Simple API for XML) 是事件驱动的解析方式,逐行读取,不加载整个文档到内存,适合处理大型 XML 文件。

需要继承 xml.sax.ContentHandler 并重写方法:

import xml.sax

class StudentHandler(xml.sax.ContentHandler):
  def init(self):
    self.current = ""
    self.name = ""
    self.age = ""

  def startElement(self, tag, attrs):
    if tag == "student":
      print("Student ID:", attrs["id"])

  def characters(self, content):
    if self.current == "name":
      self.name += content
    elif self.current == "age":
      self.age += content

  def endElement(self, tag):
    if tag == "name":
      print("Name:", self.name)
      self.name = ""
    elif tag == "age":
      print("Age:", self.age)
      self.age = ""
    self.current = ""

parser = xml.sax.make_parser()
handler = StudentHandler()
parser.setContentHandler(handler)
parser.parse("data.xml")

优点:内存占用小。缺点:代码较复杂,不能随机访问节点。

Pippit AI Pippit AI

CapCut推出的AI创意内容生成工具

Pippit AI 133 查看详情 Pippit AI

3. 使用第三方库 lxml(功能强大)

lxml 不是标准库,但功能比 ElementTree 更强,支持完整的 XPath、命名空间和 XML Schema。安装方式:

pip install lxml

使用示例:

from lxml import etree

tree = etree.parse('data.xml')
root = tree.getroot()

使用 XPath 查找所有学生姓名

names = root.xpath('//student/name/text()')
for name in names:
  print(name)

优点:性能好,支持高级查询。适合复杂 XML 处理场景。

4. 手动创建和写入 XML

ElementTree 也可以用来生成 XML 文件:

import xml.etree.ElementTree as ET

创建根节点

root = ET.Element("students")

添加子节点

stu = ET.SubElement(root, "student", id="3")
ET.SubElement(stu, "name").text = "Charlie"
ET.SubElement(stu, "age").text = "23"

写入文件

tree = ET.ElementTree(root)
tree.write("output.xml", encoding="utf-8", xml_declaration=True)

生成的 output.xml 包含声明和格式化内容。

基本上就这些常见方式。ElementTree 足够应付大多数日常任务,lxml 适合更复杂的项目,SAX 用于超大文件。根据需求选择合适的方法即可。

以上就是Python怎么解析XML文件_Python解析XML文件的几种方法的详细内容,更多请关注其它相关文章!


# 加载  # 开封seo万词霸屏系统  # 关键词排名查询爱站网  # 烟台做网站建设  # 柳南区本地网络推广营销  # 元气森林的营销推广策略  # 山西短视频营销推广公司  # 北京的网站建设定制  # 英文网站SEO工作  # 兰州靠谱seo  # 武汉建设网站建设公司  # 相关文章  # python  # 大文件  # 如何将  # 如何用  # 如何使用  # 转换为  # 几种方法  # 适用于  # 遍历  # 标准库  # 内存占用 


相关栏目: 【 企业资讯168 】 【 行业动态20933 】 【 网络营销52431 】 【 网络学院91036 】 【 运营推广7012 】 【 科技资讯60970


相关推荐: CSS实现侧边栏导航项全宽圆角悬停背景效果  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  微博网页版官方账号登录 微博网页版内容浏览使用指南  蓝湖怎样用切图标注提对接效率_蓝湖用切图标注提对接效率【设计对接】  VS Code初学者必知的10个基本操作  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  “在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法  BetterDiscord插件中安全更新用户简介的实践指南  三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升  深入理解J*a链表中的IPosition接口与使用  Python实现多节点属性重叠度分析教程  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  AO3中文官网链接_AO3网页版稳定镜像站  智慧团建扫码登录入口 智慧团建扫码登录入口官网版​  c++中为什么推荐使用using替代typedef_c++现代化类型别名  html5 app怎么运行环境_配html5 app运行环境【教程】  夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案  漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站  12306选座系统怎么选连座_12306选座多人连坐操作方法  解决深度学习模型训练初期异常高损失与完美验证准确率问题  Python模块化编程:有效管理依赖与避免循环引用  知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法  age动漫网站入口 age动漫官网直接访问入口  从OpenAI API响应中高效提取生成文本  消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技  学习通网页版官方登录 超星学习通电脑端入口指南  ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  《刺客信条:影》PS5 Pro和Switch 2画面对比  《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!  QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台  J*aScript:在map操作中高效处理空数组  小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口  韩小圈电脑版在线入口_网页版免费登录地址  J*aScript动态调整元素颜色:基于背景亮度智能切换文本与按钮样式  《噬血代码2》新预告片发布 展示游戏剧情  精准捕获:如何在页面中监听除特定元素外的所有点击事件  如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践  荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  Golang如何使用const iota_Go iota常量计数器讲解  Django模型中自动计算可用余额的实现方法  CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题  ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版  Go语言中动态执行代码字符串的策略与实践  期待已久:小米17 Ultra、小米首款NAS本月登场  C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果  汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口  Django通过AJAX异步上传图片并保存至模型的完整指南  Python Socket多播通信中指定源IP地址的实践指南  自定义Bag-of-Words实现:处理带负号的词汇权重