ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

解析XML的几种方式的原理与特点

2021-07-12 20:01:48  阅读:222  来源: 互联网

标签:XML Java DOM 几种 SAX 文档 解析


XML概述:

XML英文全写为eXtensible Markup Language(称之为 可拓展的标记语言),它是由W3C制定出来的一套关于 数据传输,使传输的数据内容统一 的规范;它是跨平台并且与软硬件无关的工具,开发中经常用于去配置文件。

 

解析XML的几种方式:

XML的解析方式分为四种:DOM解析、SAX解析、JDOM解析、DOM4J解析,前两者是基础方法,后两者是扩展方法且只适用于Java平台。

 

DOM解析(Document Object Model):

是基于树型结构的节点或者是信息片段的集合;由于是树型结构的节点和信息片段的集合,所以在解析时需要加载整个文档和构造树型结构,然后才可以检索和更新节点信息,并且检索和更新效率会更高(因为是树型结构的方式);但对于比较大的文档在解析时会很耗资源(因为文档大所以解析时加载时间要长,内存要占的多,又要构造树型结构更耗时间)

通过DOM接口,应用程序可以在任何时候访问xml文档中的任何一部分数据,因此利用DOM接口访问的方式也称之为随机访问。

DOM解析的特点:

优点:整个文档都在内存中,便于 CRUD等操作。

缺点:文档较大会很消耗资源,不能解析比系统内存大的文档。

 

SAX解析概述(Simple api for xml):

是基于事件的解析器,主要是通过事件源和事件处理器来工作。当事件源产生事件后,调用事件处理器的处理方法即可解决;若是需要调用事件处理器的特定方法时,则需要传递给事件处理器所需要处理的事件的状态,这样事件处理器才能根据事件的状态信息进行相应的处理。PULL解析:和SAX解析类似,主要差别在于事件需要开发人员自己获取事件然后处理,不像SAX有处理器触发一个事件的方法来执行我们的代码。

SAX解析的原理:

对文档进行顺序扫描,在扫描到文档(Document)开始和结束/元素(Element)开始和结束等地方,通知事件处理函数进行对应的操作,然后重复扫描直到整个文档结束。

SAX解析的特点:

优点:可以边解析边调用执行、解析速度快,在sax过程中不能进行增删改

缺点:不需要保存到系统内存,可以解析比系统内存大的文档

 

JDOM解析概述:

JDMO是一种解析XML的Java工具包,它基于树型结构,利用纯Java技术对xml文档实现解析(只适用于Java语言)

JDOM解析特点:
优点:使用大量的集合类而不是接口,简化了DOM的API,同时易于熟悉集合类的Java开发人员。

缺点:灵活性和性能比较差(和DOM类似,大于10M的文档时内存溢出)

http://www.ssnd.com.cn 化妆品OEM代加工

DOM4J解析概述:

DOM4J是一个开源的,易用的库,用于XML、Xpath、XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM、SAX、JAXP。

DOM4J解析特点:

简单易用,采用了Java的集合的框架,完全支持SAX,DOM和JAXP。
优点 1、大量使用了Java的集合类,方便Java开发人员。2、支持XPath(用于对xml文档节点的选择)。3、性能较好。
缺点 1、大量使用了接口,API较复杂。

 

综述: 

JDOM 和 DOM 在性能测试时表现不佳,在测试 10M 文档时内存溢出。在小文档情况下还值得考虑使用 DOM 和 JDOM。 虽然 JDOM 的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM 仍是一个非常好的选择。DOM 实现广泛应用于多种编程语言。它还是许多其它与 XML 相关的标准的基础,因为它正式获得 W3C 推荐(与基于非标准的 Java 模型相对),所以在某些类型的项目中可能也需要它(如在 JavaScript 中使用 DOM)。 
SAX表现较好,这要依赖于它特定的解析方式。一个 SAX 检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。 无疑,DOM4J是最好的,目前许多开源项目中大量采用 DOM4J,例如大名鼎鼎的 hibernate 也用 DOM4J 来读取 XML 配置文件。如果不考虑可移植性,那就采用DOM4J吧!

标签:XML,Java,DOM,几种,SAX,文档,解析
来源: https://www.cnblogs.com/xiaonian8/p/15003679.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有