一般来说,解析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文档,Java提供了多种解析方法,包括SAX(Simple API for XML)、JDOM(Java Document Object Model)、DOM(Document Object Model)以及stAX(Streaming API for XML)。下面将详细介绍这四种解析XML的...
DOM4J不仅支持DOM,还支持SAX和StAX解析,并且具有丰富的功能,如XPath查询、XML Schema验证等。DOM4J的jar包需要单独下载并引入到项目中,通常可以在官方网站或者Maven仓库找到。引入DOM4J后,可以通过`org.dom4j....
4. **JOM4J**:JOM4J(也称为OxM4J)是另一个高效的XML处理库,它提供了DOM、SAX和StAX的实现,以及XPath和XSLT支持。JOM4J以高性能著称,对于大型XML文档的处理非常有优势。 压缩包中的"XML文档解析"可能包含以下...
- 如果处理的XML文档既大又不需要频繁查询,可以选择StAX(Streaming API for XML),这是一种流式解析方式,介于DOM和SAX之间,性能优于DOM,灵活性接近SAX。 4. Java XML解析库: 除了Java自带的解析库,还有第三...
为了处理XML文档,有多种解析器可供选择,其中包括DOM、SAX、DOM4J、JDOM和StAX。这些解析器各有特点,适用于不同的场景。下面将详细介绍这些解析器的工作原理以及它们在生成XML并返回XML字符串形式时的应用。 1. ...
Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...
DOM4J不仅支持DOM,还支持SAX和StAX解析器,且提供了一种更简洁的API来处理XML。DOM4J特别适合处理大型XML文档,因为它允许分块读取,降低了内存需求。 3. SAX(Simple API for XML) SAX是一种基于事件驱动的解析...
XML(eXtensible Markup Language)是一种用于存储和传输数据的...此外,还可以考虑使用StAX(Streaming API for XML),这是一种介于DOM和SAX之间的解析方式,结合了两者的优势,既节省内存又允许有限的向前查找能力。
总的来说,DOM解析适用于小型XML文件,提供方便的数据访问,而SAX解析适用于大型XML文件,以低内存消耗为代价换取更高的效率。在实际开发中,选择哪种解析方式取决于项目需求和资源限制。同时,还可以考虑使用StAX...
xml解析方式包括w3c dom,sax,xpp,stax,vtd方式,其实还有jdom和xmlevent这样才够全面
本程序的核心是利用DOM、DOM4J和SAX三种不同的方式解析XML文档,每种方法都有其独特的优势和适用场景。 1. DOM解析: DOM(Document Object Model)是一种将XML文档转换为内存中树形结构的模型。它将XML文件加载到...
总之,理解并掌握Java中DOM和SAX解析XML的基本原理和使用方法,对于Java开发者来说是至关重要的技能。无论是进行数据处理、Web服务通信还是配置文件管理,XML都会是你得力的工具。通过不断的实践和学习,相信你能够...
这个简易解析器可能采用了更轻量级的解析策略,如SAX(Simple API for XML)或StAX(Streaming API for XML),以提高效率。 5. **限制中文字符**:值得注意的是,这个解析器不支持XML文档中的中文字符。这可能是...
标题中的"DOM_XML.rar"可能是一个包含DOM解析XML相关示例的压缩...然而,DOM的缺点是内存占用大,对于大型XML文档,可能需要考虑更轻量级的解析方式,如SAX(Simple API for XML)或StAX(Streaming API for XML)。
DOM4J的名字来源于Document Object Model (DOM) 和 Java的结合,但它并不局限于DOM模型,同时也支持SAX和STAX解析器,因此在处理大型XML文件时,它能提供比纯DOM更好的性能。 XML(eXtensible Markup Language)是...
StAX(Streaming API for XML)是另一种流式解析方式,介于DOM和SAX之间。它允许开发者以迭代的方式读取或写入XML,既能避免DOM解析的大内存消耗,又比SAX更易于使用。Java中的StAX实现有Woodstox和Java内置的...
然而,对于大型文件,考虑使用SAX(Simple API for XML)或StAX(Streaming API for XML)等更高效的流式解析方法,以减少内存占用和提高性能。了解并熟练掌握DOM解析,将有助于开发者更好地处理XML数据。
在Java中,有多种库和技术用于解析XML文档,包括JDOM、JAXB、DOM4J、DOM、SAX和StaX。接下来我们将详细探讨这些解析方式。 1. JDOM JDOM是Java Document Object Model的简称,它为Java提供了本地化的XML API。JDOM...
在Java中,有多种方式可以解析XML文档,主要包括DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)。每种方法都有其优缺点,适用于不同的场景。 1. DOM解析:DOM是将整个...
DOM4J是另一个流行的Java XML处理库,提供了灵活的API,支持DOM、SAX和StAX解析方式。它具有强大的XPath支持,易于学习,适合复杂查询,但内存消耗介于DOM和SAX之间。 5. JAXB(Java Architecture for XML Binding...