>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 29107 个阅读者 刷新本主题
 * 贴子主题:  sax、dom、jdom的优缺点和区别 回复文章 点赞(0)  收藏  
作者:日月光华    发表时间:2019-12-24 01:28:03     消息  查看  搜索  好友  邮件  复制  引用

sax、dom、jdom的优缺点和区别

---- sax, dom, jdom技术的优缺点比较

SAX分析器在对XML文档进行分析时,触发一系列的事件,应用程序通过事件处理函数实现对XML文档的访问。由于事件触发本身是有时序性的,因此,SAX分析器提供的是一种对XML文档的顺序访问机制,对于已经分析过的部分,不能再倒回去重新处理。
   SAX 之所以被叫做"简单"应用程序接口,是因为SAX分析器只做了一些简单的工作,大部分工作还要由应用程序自己去做。也就是说,SAX分析器在实现时,它只 是顺序地检查XML文档中的字节流,判断当前字节是XML语法中的哪一部分,检查是否符合XML语法并触发相应的事件。对于事件处理函数本身,要由应用程 序自己来实现。同DOM分析器相比,SAX分析器对XML文档的处理缺乏一定的灵活性,然而,对于那些只需要访问XML文档中的数据而不对文档进行更改的 应用程序来说,SAX分析器的效率则更高。由于SAX分析器实现简单,对内存要求比较低,因此实现效率比较高同时具有广泛的应用价值。
   DOM 分析器通过对XML文档的分析,把整个XML文档以一棵DOM树的形式存放在内存中,应用程序可以随时对DOM树中的任何一个部分进行访问与操作,也就是 说,通过DOM树,应用程序可以对XML文档进行随机访问。这种访问方式给应用程序的开发带来了很大的灵活性,它可以任意地控制整个XML文档中的内容。 然而,由于DOM分析器把整个XML文档转化成DOM树放在了内存中,因此,当XML文档比较大或者文档结构比较复杂时,对内存的需求就比较高。而且,对 于结构复杂的树的遍历也是一项比较耗时的操作。所以,DOM分析器对机器性能的要求比较高,实现效率不十分理想。不过,由于DOM分析器的树结构的思想与 XML文档的结构相吻合,而且,通过DOM树机制很容实现随机访问。因此DOM分析器也有较为广泛的使用价值。
   JDOM是处理XML的纯JAVA API。使用具体类而不用接口,既要生成大多数节点类型的实例,只要将一两个变元传入即可。是目前表现优秀的处理XML的JAVA API。其优缺点如表1所示:
表2:SAX、DOM及JDOM技术优缺点
                                                
SAX
优点:①无需将整个文档加载到内存,因而内存消耗少
     ②推模型允许注册多个ContentHandler
缺点:①没有内置的文档导航支持
     ②不能够随机访问XML文档
     ③不支持在原地修改XML
     ④不支持名字空间作用域
最适合于:只从XML读取数据的应用程(不可用于操作或修改XML文档)



DOM
优点:①易于使用
     ②丰富的API集合,可用于轻松地导航
     ③整棵树加载到内存,允许对XML文档进行随机访问
缺点:①整个XML文档必须一次解析完
     ②将整棵树加载到内存成本较高
     ③一般的DOM节点对于必须为所有节点创建对象的对象类型绑定不太理想
最适合于:需要修改XML文档的应用程序或XSLT应用程序(不可用于只读XML的应用程序)



JDOM
优点:①是基于树的处理XML的Java API,把树加载在内存中
     ②没有向下兼容的限制,因此比DOM简单
     ③速度快,缺陷少
     ④具有SAX的JAVA规则
缺点:①不能处理大于内存的文档
     ②JDOM表示XML文档逻辑模型。不能保证每个字节真正变换。
     ③针对实例文档不提供DTD与模式的任何实际模型。
     ④不支持与DOM中相应遍历包
最适合于:JDOM具有树的便利,也有SAX的JAVA规则。在需要平衡时使用


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->面向对象开发方法概述之UML语言(下)
  JavaWeb开发-->JSP中使用JavaBean(Ⅰ)
  JSP与Hibernate开发-->域对象在持久化层的四种状态
  Java网络编程-->ServerSocket用法详解
  精通Spring-->
  Vue3开发-->Vue组件开发高级技术
  JDK17的新特性
  NIO底层原理
  Java Proxy用法: 让我们创建一个API代理器
  购书咨询
  64匹马,8个赛道,找出跑得最快的4匹马
  Java并发之volatile关键字内存可见性问题
  Synchronized与ReentrantLock区别总结
  深入分析synchronized实现原理
  Eclipse使用指南:常用视图(View) 的用法
  Java入门实用代码:获取所有线程
  Java入门实用代码:删除链表中的元素
  Java入门实用代码:自定义异常
  Java 入门实用代码:汉诺塔算法
  史上最全正则表达式合集(马上收藏)
  Java判断一个字符是否为中文字符
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。