网站首页 > java教程 正文
什么是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解析。
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的节点都被删除了,如下:
千里之行始于足下,若感兴趣就动手操作一下吧,感谢您的转发、关注支持。
猜你喜欢
- 2024-10-17 Qt开发-DOM方式解析XML(qt开发工具)
- 2024-10-17 JAVA 操作笔记-XML(六)(xml在java中怎么用)
- 2024-10-17 作为一名程序猿,你不可不知的Java基础知识的三十个经典问答
- 2024-10-17 Android中XML文件解析,现在了解还不晚
- 2024-10-17 JSP 标准标签库(JSTL)(jsp标签库有哪些)
- 2024-10-17 Spring源码阅读:Spring XML解析机制
- 2024-10-17 XML文件(xml文件怎么打开)
- 2024-10-17 Python如何解析HTML和XML数据(python解析html xml最好的模块)
- 2024-10-17 深入解析Python中的XML处理:理论与实践的结合
- 2024-10-17 XML的解析方式(xml的解析方式有哪些)
你 发表评论:
欢迎- 05-16SpringBoot整合Redis实现常用功能
- 05-16基于Redis实现简单的延时消息队列
- 05-16安装Redis
- 05-16Spring系列之Redis的两种集成方式
- 05-16Django连接Redis集群问题排查思路和总结
- 05-16只需5分钟,完成Redis所有命令操作~
- 05-16熟练使用 Redis 的 5 大数据结构:Java 实战教程
- 05-16Redis 常见业务场景及实例(Java)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)