专业的JAVA编程教程与资源

网站首页 > java教程 正文

Python ElementTree 实现XML文件解析

temp10 2024-10-17 16:25:01 java教程 8 ℃ 0 评论

什么是XML?

可扩展标记语言XML是一种类似于HTML或SGML的标记语言。XML 被设计用来传输和存储数据,而并非显示数据。使用XML可以方便的实现数据交换、系统配置、内容管理等。


Python中XML解析方式

  • SAX(Simple API for XML ):Python 标准库包含 SAX 解析器,SAX 用事件驱动模型,SAX解析通过流模式在解析XML的过程中触发对应的事件(start_element、char_data、end_element)并调用用户定义的回调函数来处理XML文件。
  • DOM(Document Object Model):将XML数据在内存中解析成一个树,通过对树的操作来操作XML,占用内存大,解析速度较慢,优点是可以任意遍历树的节点。
  • ElementTree:类似一个轻量级的DOM,具有方便友好的API,代码可用性好,速度快,消耗内存少。

因DOM需要将XML数据映射到内存中的树,效率低、耗内存。而SAX流式读取XML文件,虽然效率高、占用内存少,但需要用户实现回调函数。本文将介绍ElementTree的方式实现XML解析。

Python ElementTree 实现XML文件解析

ElementTree在Python标准库中有两种实现:一种是纯Python实现的,如xml.etree.ElementTree,另一种是效率较高的xml.etree.cElementTree。从Python 3.3开始ElementTree模块会自动寻找可用的C库来加快速度。


示例XML数据

本文示例数据采用官方API示例中的XML文档,XML文档如下:


XML文件格式介绍

XML格式如下

 <tag attrib = > text </tag> tail
  • tag:标签,用于标识该元素表示哪种数据。
  • text:标签中的文本字符串,可以用来存储一些数据。
  • attrib:标签中的属性和属性值,用Dictionary形式保存。
  • tail:保存与元素相关联的附加数据,非必须。

遍历XML各节点

使用ElementTree解析XML文件的一般流程:

  • 导入ElementTree
  • 解析Xml文件
  • 获得根节点
  • 查找或遍历根节点可以获得子节点
  • 根据需要对节点进行更新、删除等操作

执行上述代码,输出结果为:


获取指定节点元素

常用的XML元素获取方式如下:

  • find(nodename):在当前节点下,查找其中第一个tag为nodeName的节点。
  • findall(nodename):在当前节点下,查找其中所有tag为nodeName的节点。
  • iter(nodename):递归查找所有的子结点,以便查找到所有tag为nodeName的节点。

使用find 查找当前节点下第一个tag为country的节点。

执行结果如下


使用findall查找当前节点下所有tag为country的节点。

执行结果如下


使用iter查找所有节点下所有tag为neighbor的节点。

执行结果如下


更新指定的节点

假设我们想在每个国家的排名后延2位,然后增加更新状态节点,并将更新后的属性添加到rank元素,需要使用ElementTree.write()方法将更新后的 XML 文档写入文件中。

修改后的XML文件如下:


删除指定的节点

使用remove方法,移除指定的节点。如,我们想移除所有country节点下neighbor中name为Colombia或者Austria的节点,需要使用ElementTree.write()方法将更新后的 XML 文档写入文件中。

如上代码将 neighbor 中name为Colombia或者Austria的节点都被删除了,如下:


千里之行始于足下,若感兴趣就动手操作一下吧,感谢您的转发、关注支持。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表