网上能够查到很多的4种解析方式的区别,我再做一下摘录和总结,顺带给自己做个备份。

SAX

sax分析器在对xml文档进行分析时,触发一系列的事件,应用程序通过事件处理函数实现对xml文档的访问.

因为事件触发是有时序性的,所以sax分析器提供的是一种对xml文档的顺序访问机制,对于已经分析过的部分,

不能再重新倒回去处理.此外,它也不能同时访问处理2个tag.

sax分析器在实现时,只是顺序地检查xml文档中的字节流,判断当前字节是xml语法中的哪一部分,检查是否符合

xml语法并且触发相应的事件.对于事件处理函数的本身,要由应用程序自己来实现. SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。

同DOM分析器相比,sax分析器对xml文档的处理缺乏灵活性,但对于只访问xml文档中的数据而不改变应用程序

来说,sax分析器的效率会很高.

sax对内存要求也比较低.

优点:1、无需将整个文档加载到内存中,所以内存消耗少.

2 、推模型允许注册多个contentHandler.

缺点:1、没有内置的文档导航支持.

2、不能随机访问xml文档.

3、不支持原地修改xml.

4、不支持名字空间作用域.

适合:对xml文档读取数据

DOM

DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。也就是说,通过DOM树,应用程序可以对XML文档进行随机访问。这种访问方式给应用程序的开发带来了很大的灵活性,它可以任意地控制整个XML文档中的内容.用DOM解析模型编程容易,开发人员只需要调用建树的指令,然后利用navigation
APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。

优点:1、丰富的API集合,可以轻松导航.

2、 整个DOM树加载到内存,允许随机访问.

缺点:1、整个xml文档必须一次解析完.

2、整个DOM树都加载到内存中,内存要求高.

3、一般的DOM节点对于必须为所有节点创建对象的对象类型绑定不太理想.

适用:对xml文档修改数据

JDOM

JDOM是处理xml的纯java api.使用具体类而不是接口.JDOM具有树的遍历,又有SAX的java规则.JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。

优点:1、是基于树的处理xml的java api,把树加载到内存中.

2、没有向下兼容的限制,所以比DOM简单.

3、速度快.

4、具有SAX的java 规则.

缺点:1、不能处理大于内存的文档.

2、JDOM表示XML文档逻辑模型,不能保证每个字节真正变换.

3、 针对实例文档不提供DTD与模式的任何实际模型.

4、 不支持于DOM中相应遍历包.

适用:自行选择

DOM4J

DOM4J有更复杂的api,所以dom4j比jdom有更大的灵活性.DOM4J性能最好,连Sun的JAXM也在用DOM4J.目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.

优点:1、灵活性最高

2、易用性和功能强大、性能优异

缺点:1、复杂的api

2、移植性差

适用:自行选择

sax/dom/jdom/dom4j的区别的更多相关文章

  1. DOM、JDOM、DOM4J的区别(转载)

    DOM.JDOM.DOM4J的区别 分类: XML2012-06-11 20:47 5576人阅读 评论(6) 收藏 举报 文档xmlcollectionsjavaapi工作 dom是解析xml的底层 ...

  2. DOM、SAX、JDOM、DOM4J以及PULL在XML文件解析中的工作原理以及优缺点对比

    1. DOM(Document Object Model)文档对象模型1. DOM是W3C指定的一套规范标准,核心是按树形结构处理数据,DOM解析器读入XML文件并在内存中建立一个结构一模一样的&qu ...

  3. DOM、SAX、JDOM、DOM4J四种XML解析方法PK

    基础方法(指不需要导入jar包,java自身提供的解析方式):DOM.SAXDOM:是一种平台无关的官方解析方式   --优点:          (1)形成了树结构,直观好理解,代码更易编写     ...

  4. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...

  5. java操作xml方式比较与详解(DOM、SAX、JDOM、DOM4J)

    java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式的比较与详解     1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准. ...

  6. JAVA与DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 学习笔记二

    要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载   sax.dom是两种对xml文档进行解析的方法(没有具体实现,只是接口),所以只有它们是无 ...

  7. DOM、JDOM、DOM4J的区别

    dom是解析xml的底层接口之一(另一种是sax)   而jdom和dom4j则是基于底层api的更高级封装    dom是通用的,而jdom和dom4j则是面向Java语言的       DOM 是 ...

  8. java xml解析方式(DOM、SAX、JDOM、DOM4J)

    XML值可扩展标记语言,是用来传输和存储数据的. XMl的特定: XMl文档必须包含根元素.该元素是所有其他元素的父元素.XML文档中的元素形成了一颗文档树,树中的每个元素都可存在子元素. 所有XML ...

  9. SAX与DOM解析XML的区别

    解析xml有四种方法:DOM,SAX,DOM4j,JDOM.     我们主要学了两种:DOM和SAX.     DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件.各有各的好. DO ...

随机推荐

  1. AJAX跨域

    AJAX跨域AJAX不允许跨域访问. 跨域是指浏览器B显示的是服务器S1的数据,全是从S1取得的数据则是同域:但如果B显示的S1上的数据的某个比如img是从S2上取得的数据,则是跨域.端口不一样也是跨 ...

  2. Advanced Collection Views and Building Custom Layouts

    Advanced Collection Views and Building Custom Layouts UICollectionView的结构回顾 首先回顾一下Collection View的构成 ...

  3. 修复PHP在64位下序列化(serialize)的字符串在32位机器下反序列

    32机器下PHP 整型数值的范围最大不超过2147483647,而有些超出范围的数值在64序列化好的数据标识为整型,在反序列时就可能会出错. 尝试使用以下的办法可以修复此问题 function int ...

  4. Struts2.3.15.1源码浅析

    Struts2 两大运行主线: 1.初始化主线:初始化主线主要是为Struts2创建运行环境(此处的环境与Struts2身处的Web环境是有区别的),初始化入口StrutsPrepareAndExec ...

  5. ASP.NET Web 应用程序及页面生命周期

    以客户端浏览器向 ASP.NET Web 应用程序页面发送请求(Request)为起点,以浏览器收到 Web 服务器的响应(Response)为终点,这一完整的过程被称为"应用程序及页面的生 ...

  6. Java-适配器

    对于Java程序来说,如果一个类要实现一个接口,则必须要覆写此接口中的全部抽象方法,那么如果此时一个接口中定义了抽象方法过多,但是在子类中有用不到这么多的抽象方法,则肯定很麻烦,所以此时需要一个中间的 ...

  7. React组件生命周期过程说明

    来自kiinlam github94 实例化 首次实例化 getDefaultProps getInitialState componentWillMount render componentDidM ...

  8. CentOS常见问题

    1.图形界面无法启动 检查messagebus服务是否为开机启动:chkconfig --list messagebus 如果状态为不启动,则修改之:chkconfig messagebus on 启 ...

  9. 加密配置文件(App.Config和Web.config)中connectionStrings通用方法

    1. 背景:根据项目的要求,需要对配置文件配置的数据库连接字符串进行加密,也就是对ConnectinString节点的内容进行加密存储,同时考虑到代码使用连接字符串不需要进行更改,C#会自动对加密的内 ...

  10. 如何通过SerialPort读取和写入设备COM端口数据

    SerialPort类用于控制串行端口文件资源.提供同步 I/O 和事件驱动的 I/O.对管脚和中断状态的访问以及对串行驱动程序属性的访问.另外,SerialPort的功能可以包装在内部 Stream ...