Python怎么解析XML文件_Python解析XML文件的几种方法

月夜之吻
发布: 2025-11-03 20:56:02
原创
532人浏览过
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):

<?xml version="1.0"?>
<students>
  <student id="1">
    <name>Alice</name>
    <age>22</age>
  </student>
  <student id="2">
    <name>Bob</name>
    <age>24</age>
  </student>
</students>

使用 ElementTree 解析:

立即学习Python免费学习笔记(深入)”;

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")

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

巧文书
巧文书

巧文书是一款AI写标书、AI写方案的产品。通过自研的先进AI大模型,精准解析招标文件,智能生成投标内容。

巧文书 61
查看详情 巧文书

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文件的几种方法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号