http://www.sqlite.com.cn/MySqlite/12/212.Html

http://gatusso52.javaeye.com/blog/446100

方式

模型

原理

说明1

说明2

Tree-based API

DOM  JDOM DOM4j

把xml文件读入,变成DOM模型的一棵树,然后查找获取自己想要的东西

Xml文件很大时会占用很大内存。

即速度慢,占用内存大

Event-based API

PUSH: SAX

Application被parser控制了(Observer模式)

SAX只能读xml文件。速度比dom快,但仍不理想

Xml文件很大时,又不需要进行随机查找的时候,适合采用此方式

PULL:StAX

Application控制了parser(Iterator模式)

SAX不但能读xml还能写xml。速度很快

简说XML的解析方式(DOM,SAX,StAX)

一般来说,解析XML文件存在着两种方式,一种是event-based API,比如说象SAX,XNI. 第二种是tree-based API,比如说DOM,JDOM,DOM4j等等. 一般来说,读取配置文件时,我们一般比较喜欢应用tree-based API这种方式,就是把xml文件读入,变成DOM形式的一棵树,然后进行查找,获取自己说想要的东西. 但是,这种方式有个缺点,那就是如果你这个XML文件很大的话,你需要占用很大的内存.
所以对于很大的一个xml文件,又不需要进行随机查找的时候,比较适合采用event-based API,那就是说他解析xml文件,如果是START_ELEMENT,那么他就调用startElement()的回调方法..他遍历过了就过了,不能再回去. 
在event-based API中又存在两种方式: 一个是PUSH的方式,就比如说是SAX. 另外一种是PULL的方式,比如StAX. 
怎么来理解PUSH和PULL的区别呢. 先假设有这么三个角色: application, xmlFile, xmlParser. 那么,如果我们采用PUSH的方式,步骤为:
 1. 创建一个xmlParser.
 2. 把我们的application处理xml的注册到xmlParser.
 3. xmlParser遍历xmlFile,然后来调用application.
这里面,用的是Observer的模式,就是接收到event的时候,去调用event的callback函数, 这里面有个很不好的地方就是,你application反而是被Parser控制了.
于是,就出现了PULL方式的解析.
 1. 创建一个xmlParser
 2. xmlParser打开一个xmlFile
 3. application调用这个xmlParser, 来获取xmlParser打开xmlFile所得到的一系列event.
这里,用到了Iterator的模式. 最主要的一点是: 这个时候application控制了xmlParser.
StAX有两种API,一种是cursor-based,一种是iterator-based. 这两种详细的比较参考:http://java.sun.com/webservices/docs/1.6/tutorial/doc/SJSXP3.html#wp102139

这里,SAX和StAX的另外一点区别是: SAX只能读xml文件. StAX不但能读xml文件,而且还能写xml文件.

传统的处理XML的API有DOM和SAX两种,DOM速度慢,占用内存极大。SAX虽然比DOM快,但速度任不理想。现在,一种新的基于流的 Stream API for XML(简称 StAX)极大地提高了XML的处理速度,并且已经称为JSR 173标准(http://www.jcp.org/en/jsr/detail?id=173 )。目前,StAX最好的开源实现是Woodstox(http://woodstox.codehaus.org/ ),它完整地支持StAX API。Resin3.1也内置了StAX的实现,但是并没有支持所以的StAX API。XFire在ClassPath上如果找到了StAX API的定义,就会试图定位一个StAX的实现。

xml解析方式与效率对比相关推荐

  1. XML解析方式(来自 传智播客 方立勋视频教程)

    为什么80%的码农都做不了架构师?>>>    XML解析方式一般有两种:DOM和SAX DOM:(Document Object Model,即文档对象模型)是W3C组织推荐的解析 ...

  2. java 解析3层xml_java xml 解析方式汇总#高级程序员必备技能#

    1.xml背景 格式良好的(web-fromed)xml可以不需要文档类型定义(DTD),只要满足基本的xml格式规范就可以认为是格式良好的xml文档.但是格式标准,只能说明元素.标签.格式是合法的, ...

  3. 关于Android中XML解析方式

    XML解析一般有三种方式:DOM .SAX.PULL. SAX解析器:它是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作.当事件源产生事件后,调用事件处理器相应的 ...

  4. IOS中的XML解析方式

    XML解析 DOM方式:一次性将整个XML文档加载进内存,比较消耗内存,适合小文件,可以随机解析任何一个节点 SAX方式:从根元素开始,按顺序一个元素一个元素的往下解析,比较适合大文件,缺点;不能往回 ...

  5. java反射效率对比_Java反射三种方式的效率对比

    1 使用field long start = System.nanoTime(); Field[] fields = CallCount.class.getDeclaredFields(); for ...

  6. Java中的四种XML解析方式(一)

    1. SAX解析 解析方式是事件驱动机制 ! SAX解析器, 逐行读取XML文件解析 , 每当解析到一个标签的开始/结束/内容/属性时,触发事件. 我们可以编写程序在这些事件发生时, 进行相应的处理. ...

  7. android的xml解析方式,Android中对xml文件解析的3种方式总结

    前言 xml 是数据传输的一种格式,Android 中的布局文件.设置文件等都采用它来表示.Android 中对 xml 文件的解析也有多种方式,下面介绍常用的 3 种方式: Dom . SAX 和 ...

  8. android 中xml解析方式

    2019独角兽企业重金招聘Python工程师标准>>> XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重 ...

  9. [转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml

    转自:http://www.itdaan.com/blog/2017/02/20/301ad47832f4.html 由于windows环境下测试不稳定,博主选择在linux下进行的测试! Qt - ...

最新文章

  1. 科普丨莫拉维克悖论(人工智能中最重要的发现之一)
  2. Android 6.0 运行时权限处理完全解析
  3. python有道翻译接口-Python通过调用有道翻译api实现翻译功能示例
  4. 将一台电脑的磁盘空间映射到另一台电脑
  5. 微信小程序适配iPhone X
  6. pandas常用函数,个人常用的
  7. #1407 : 后缀数组二·重复旋律2 (不可重叠最长重复子串问题)
  8. 随机抽样java_实现随机抽样【随机数生成问题】
  9. 【kafka】kafka 消费 带有 kerberos认证的服务器
  10. matlab gui教程 计算器,matlab gui编写的计算器程序
  11. python unittest接口测试_python+request+unittest 接口测试练习
  12. php替换图片_php实现图片上传并进行替换操作
  13. NO.76 禅道使用分享第八期:创维软件开发团队畅谈专业版
  14. VRay5.0 for 3dsMax2016-2021及素材库
  15. Camera service服务启动流程
  16. TCP/IP的安全缺陷
  17. 主内存和工作内存是什么?
  18. 使用python库relate搭建LMS学习管理系统
  19. iOS/OS X内存管理(二):借助工具解决内存问题
  20. Android监听程序进入后台,或者恢复到前台

热门文章

  1. html高度塌陷问题
  2. 华为p20Pro投屏电脑 手机投屏电脑教程
  3. 杨绛谈读书:乐在其中,读书好比串门儿
  4. bm17bm6bm18
  5. eversync safari_Eversync:书签同步插件
  6. Linux中lvdisplay命令的用法,lvdisplay
  7. JavaScript高级编程设计(第三版)——第四章:变量作用域和内存问题
  8. Windows Server 2008启用禁用IE增强的安全配置
  9. Android神奇“控件”-----RemoteViews
  10. 国网电费充值api,油卡充值api(中石化中石油)