解析XML的几种方式的原理与特点
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吧!