基础 -- Java笔记10--XML解析
Java笔记10–XML解析
2016年1月20日
15:56
几个常见名词间的关系图
DOM和SAX是模型、JAXP实现了他们两的接口、JDOM和DOM4J是DOM的分支、Xerces和Crimson是继承自JAXP的实现。
DOM–文档对象模型(document object module)
基于树和节点的文档对象模型称为DOM。
DOM解析器吧XML文档转化为一个包含内容的树,并可以对树进行遍历。
优缺点:编程容易,调用建树指令,可以很容易的添加和修改树中的元素。处理大型文件是其性能下降的非常厉害,因为它在解析文件之前把整个文档装入内存,可以想象其面对大文件时的尴尬。
SAX–事件驱动模型
基于事件的xml简单API称为sax(simple API for xml)
Sax不需要一次全部装载整个文件,当遇到一个像文件开头、结尾或者是标签的开头与结束时,它会触发一个事件,适合对xml的顺序访问。
JAXP–DOM和SAX接口的实现
Sun公司提供了JAXP(java API for xml parsing)来实现DOM 和SAX接口,同时具有了他们两的解析能力,其实是完成了堆他们两的包装,采用了设计模式中的工厂模式。
DOM的分支发展–JDOM和DOM4J
JDOM和DOM4J是DOM的两种变体,他们并不完全符合W3C的规范。
JDOM是一种面向java的读、写和操作XML文档的API。实现了sax和dom标准兼容,为java程序员提供了一个简单、轻量的xml文档操作方法;它其实是专门为java程序员开发的,采用了许多java语言的优秀特征,比如方法的重载、集合和类映射。(这个东西由于是专门为了java为设计的,相当于是官方的儿子,所以一生出来就受到了大力的推广)
DOM4J是一个易用的、开源的库,用于XML、XPth和XSLT。应用于java平台,采用了java集合框架并完全支持DOM、SAX和JAXP。(这个东西是开源的,相当于是人民的儿子,所以近年来发展得越来越好了)
Xerces和Crimson
Xerces是有Apache组织所推动的一项xml文档解析开源项目,它目前有多种语言版本(java、c++、perl、com等),号称是地球上最快的xml解释器。
Crimson是一个基于java的xml解析器。
流式操作库StAX
StAX(streaming API for xml)是一个基于java语言处理xml的最新标准,作为一种面向流的方法,无论从性能还是可用性上都优于其他方法,好像只是对dom和sax而言的(那两种方法本来就是很原始的,这句话就像是废话一样)
总结:jdom和dom在性能测试中表现不佳,在测试10mb的文档是内存溢出。
Sax表现较好。
Dom4j性能最好,hibernate中就是用它来读取xml配置问价的,在不考虑可移植性的条件下推荐使用它。
已使用 Microsoft OneNote 2016 创建。