`

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

    博客分类:
  • J2SE
 
阅读更多
一般来说,解析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的实现。
分享到:
评论

相关推荐

    java xml 4 种 解析xml 方法 sax jdom dom stAX

    java 解析xml 方法 sax jdom dom stAX

    Java下3中XML解析 DOM方式、SAX方式和StAX方式

    目前我知道的JAVA解析XML的方式有:DOM, SAX, StAX;如果选用这几种,感觉还是有点麻烦;如果使用:JAXB(Java Architecture for XML Binding),个人觉得太方便了

    xml解析方式大全

    xml解析方式包括w3c dom,sax,xpp,stax,vtd方式,其实还有jdom和xmlevent这样才够全面

    xml三种解析方法实现

    xml解析 SAX解析 XML pull解析 DOM解析 包含三种解析方式 全部实现xml pull与stax类似 故省略

    XML-Sax-Dom-Stax-Jaxb-Paint2D:vjezba

    XML-Sax-Dom-Stax-Jaxb-Paint2D:vjezba

    XML解析Demo

    本示例采用了DOM、SAX、StAX三种方式解析XML,注释相对比较详细。通过Java代码实现的一个解析。

    DOM、SAX、DOM4J、JDOM、StAX生成XML并返回XML字符串形式

    NULL 博文链接:https://dreams75.iteye.com/blog/512319

    使用StAX进行高效的XML处理中文版

    使用StAX进行高效的XML处理中文版 强烈推荐

    Java XML and JSON(Apress,2016)

    The first six chapters focus on XML along with the SAX, DOM, StAX, XPath, and XSLT APIs. The remaining four chapters focus on JSON along with the mJson, GSON, and JsonPath APIs. Each chapter in Java...

    Xml方面笔试题

    笔试Xml方面笔试题软件测试91、xml有哪些解析技术?...这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动

    Java XML and JSON: Document Processing for Java SE, 2nd Edition

    The first six chapters focus on XML along with the SAX, DOM, StAX, XPath, and XSLT APIs. The remaining six chapters focus on JSON along with the mJson, GSON, JsonPath, Jackson, and JSON-P APIs. Each ...

    Java and XML, 3rd Edition

    《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...

    Java and XML(英文第三版)

    This third edition of Java and XML covers all major Java XML processing libraries, including full coverage of the SAX, DOM, StAX, JDOM, and dom4j APIs as well as the latest version of the Java API ...

    axiom-api-1.2.10.jar

    SAX和DOM 都是基于push的解析方式,也就是说解析控制在parser本身。 Axiom和StAX紧密相关,要使用Axiom,StAX相关的jar包也必须在classpath下 。 性能 使用 XMLBench Document Model Benchmark 测试的结果表明,...

    JAVA与XML.rar

    《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...

    Java下XML的解析

    目前我知道的JAVA解析XML的方式有:DOM,SAX,StAX;如果选用这几种,感觉还是有点麻烦;如果使用:JAXB(Java ArchitectureforXMLBinding),个人觉得太方便了!:个人理解类似.net的XmlDocument,解析的时候效率不高,...

    fluentxml4j:Java中用于XML解析,序列化,XPath查询和转换的fluent API

    通过XSLT和自定义过滤器支持将java.io,SAX,StAX,JAXB输入转换为它们中的任何一个 通过XPath查询org.w3c.dom.Document以获取String,Boolean,Number,org.w3c.dom.Element或Node,并使用Java 8 Streaming API

    Android读写XML.docx

    举例来说,Java 的 Simple API for XML (SAX) 和 Document Object Model (DOM) 在 Android 上都是可用的,这些 API 多年以来一直都是 Java 技术的一部分,较新的 Streaming API for XML (StAX) 在 Android 中并不...

    Java与XML第三版本

    书中的主题为XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换(Transformation) SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 DOM应用程序编程接口,包括DOM第2层、第3层和DOM ...

    MySQL驱动jar

    通过JAXP接口支持用于XML处理DOM,SAX和StAX 支持设置每个连接的客户端信息(可以查看查询的意见通过“SHOW PROCESSLIST的”一个MySQL服务器上,或通过一个公共接口,可扩展,以支持自定义持久性的信息) JDBC-4.0 ...

Global site tag (gtag.js) - Google Analytics