`
Before_Morning
  • 浏览: 36877 次
文章分类
社区版块
存档分类
最新评论

XML解析--DOM方式和SAX方式的对比

 
阅读更多

在上一节我们已经介绍了XML的相关基本的知识,对XML的结构模型也有了相对的了解。对于XML的解析思想主要有两种方式:DOM方式解析和SAX解析方式。下面我们就对这两种方式进行对比学习。

一、DOM解析方式思想

1.DOM解析是构建整个文档驻留内存的树模型。

看到上面的DOM解析XML的思想,也许觉得很抽象。下面我们就通过一个XML文档来介绍DOM解析XML的思想:

eg:

XML文档:domParse.xml

<?xml version="1.0" encoding="UTF-8"?>
<computer>
	<price>5000</price>
	<hardware>
		<screen>samsung</screen>
		<keyboard>luoji</keyboard>
		<mouse>ausa</mouse>
	</hardware>
	<software>
		<JAVAIDE>Eclipse</JAVAIDE>
		<JAVAIDE>MyEclipse</JAVAIDE>
	</software>
</computer>


对于DOM解析,首先是将整个XML文档读到内存中,形成一颗倒状的DOM树,如下图:

从上面的DOM树,我们应该很清楚Dom的解析思想了:其实就是在我们的程序对xml进行操作之前,DOM解析器就把整个文档读取到内存中去了。

知道了Dom解析的思想后,我们对其方式进行的利弊进行一下分析:

(1)、优点:

a.能够从整体上去把我文档结构,十分方便对xml文档的节点进行crdu操作;

b.只需要解析一次拿到dom对象之后就可以重复使用该对象进行操作,可以减少解析的次数

(2)、缺点:

a.解析过程比较慢,需要将整个文档都解析完成后才能进行操作;

b.需要将整个文档的内容都加载到内存中,比较消耗内存,当文档过大时,这种方式对内存的要求是很大的;

c.如果只关注文档的一小部分,会造成资源的极大浪费;

d.解析的时候,会有延迟,因为每次都是从头开始遍历。

二、SAX解析方式思想

SAX解析方式是基于事件驱动的方式来解析的。当解析器发现元素开始、元素结束、文本、文档的开始或结束时,会触发相应的方法去处理。

同样的,我们对上面的XML文档也通过画图的方式来说明SAX的解析思想:

同样,我们对SAX的解析方式思想通过上面的图的形式,可以清楚的描述其实现解析的思想。

下面,谈谈SAX解析方式的优点和缺点:

(1)优点

a.不需要等待整个xml文档全部加载到内存中,当解析到某一部分的时候自动触发到对应的方法去做处理,处理的效率比较高;

b.不需要将整个文档加载到内存中去,对内存的要求比较低,无论多大的xml理论上都可以解析,而且没有延迟。

(2)缺点

a.每次解析都只能处理一次,下次要再次处理还要重复的执行解析操作;

b.只能进行查询,不能进行增删改的操作。

对于SAX的解析方式,简单的附上一个Demo,只需要了解即可:

xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<书架> 
  <书> 
    <书名>Java就业培训教程</书名>  
<pre class="java" name="code">    <作者>张孝祥</作者>  
    <售价>39.00元</售价> 
  </书>  
  <书> 
    <书名>JavaScript网页开发</书名>  
    <作者>张孝祥</作者>  
    <售价>28.00元</售价> 
  </书> 
</书架>


XmlSaxParse.java

package com.jjyy.xml.sax;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
/**
 * Sax方式解析XML
 * @author JiangYu
 *
 */
public class XmlSaxParse {
	public static void main(String[] args) throws Exception {
		SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser saxParser = factory.newSAXParser();
		XMLReader xmlReader = saxParser.getXMLReader();
		xmlReader.setContentHandler(new MyConentHandler());
		
		xmlReader.parse("book.xml");
	}
}

class MyConentHandler extends DefaultHandler{
	private String eleName;
	
	private int count = 0;
	
	public void startElement(String uri, String localName, String name,
			Attributes atts) throws SAXException {
		this.eleName = name;
		
	}
	
	public void characters(char[] ch, int start, int length)
	throws SAXException {
		if("书名".equals(this.eleName)&& ++count==2){
			System.out.println(new String(ch,start,length));
		}
	}
	
	@Override
	public void endElement(String uri, String localName, String name)
		throws SAXException {
		this.eleName=null;
	}
}



分享到:
评论

相关推荐

    XML四种解析方式------DOM SAX JDOM DOM4J

    在处理XML文档时,有多种解析方式,包括DOM、SAX、JDOM和DOM4J。每种解析方式都有其特性和适用场景,下面将详细探讨这四种解析方法。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中,形成一...

    dom解析和sax解析

    DOM解析是一种基于树型结构的XML解析方法。当一个XML文档被DOM解析器加载时,整个文档会被转化为一棵内存中的对象树,称为DOM树。每个XML元素、属性、文本节点等都被映射为树中的一个对象。例如,给定的XML示例: `...

    dom4j下sax解析xml

    总结起来,dom4j库提供了DOM和SAX两种XML解析方式,而SAX解析在处理大文件时具有性能优势。通过注册事件处理器,开发者可以在解析过程中动态响应XML结构,实现灵活的数据处理。在实际工作中,选择合适的解析方法取决...

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    - 可能还包括对比DOM和SAX解析的性能测试,以及在不同场景下选择哪种解析方式的建议。 通过学习这些示例,开发者可以更好地理解XML解析原理,熟练掌握Java处理XML的技巧,提升软件开发中的数据处理能力。

    XML ----DOM操作

    因此,在处理大量数据时,可能需要考虑其他解析方式,如SAX(Simple API for XML)或StAX(Streaming API for XML),它们以事件驱动的方式逐行读取,降低了内存占用。 总的来说,XML和DOM在数据存储和传输中扮演了...

    Java解析XML文件的DOM和SAX方式.doc

    Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种方式的原理、实现和优缺点。 DOM 方式 ...

    DOMParser解析xml

    DOMParser是JavaScript中处理XML文档的主要工具,它允许我们将XML数据转换为DOM(Document Object Model)对象,从而方便我们通过编程方式访问和操作XML内容。 DOM是一种树型结构,将XML文档中的每个元素、属性和...

    Android XML解析(DOM、PULL、SAX三种方式)

    Android系统提供了三种主要的XML解析方式:DOM(Document Object Model)、PULL(Pull Parser)和SAX(Simple API for XML)。每种方法都有其独特的特性和应用场景,下面将详细介绍这三种XML解析方式。 1. DOM解析...

    dom和sax对xml的解析

    在Java中,有多种方式可以解析XML文档,其中最常用的是DOM(Document Object Model)和SAX(Simple API for XML)。本篇文章将详细介绍DOM和SAX解析XML的方法,并通过提供的`DomDemo.java`和`SaxDemo.java`示例代码...

    java解析xml数据---sax解析器

    Java解析XML数据主要涉及到的是对XML文档的读取和处理,SAX(Simple API for XML)解析器是一种基于事件驱动的解析方式,适用于处理大型XML文件。与DOM(Document Object Model)解析器不同,SAX不需要一次性加载...

    xml 三种解析方式dom,sax,dom4j

    在提供的压缩包中,包含了关于这三种解析方式的代码示例,你可以参考这些代码了解如何在Java环境中使用DOM、SAX和DOM4J进行XML解析。通过阅读和理解这些示例,你可以更好地掌握XML解析技术,并根据项目需求选择合适...

    XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细

    常见的 XML 解析器有 DOM、SAX、JDOM 和 DOM4J 等。每种解析器都有其特点和优缺,选择合适的解析器对应用程序的性能和开发效率有很大影响。 1. DOM 解析器 DOM(Document Object Model)是 W3C 官方标准,用于表示...

    VTD-XML 不同于SAX和DOM的XML高效解析器

    总结起来,VTD-XML是介于SAX和DOM之间的一个折衷方案,它在保持低内存占用的同时,提供了XPath支持和更高的性能,对于那些需要高效解析和查询XML的应用来说,VTD-XML是一个理想的选择。同时,它的跨平台性和多语言...

    生成、解析xml的四种方式(dom,dom4j,sax,jdom)

    JDOM是专门为Java设计的XML解析库,它提供了一种与DOM类似的API,但性能更好,因为它是完全用Java实现的,没有依赖底层的平台实现。JDOM支持两种解析模式:SAXBuilder(类似SAX)和Builder(类似DOM)。JDOM简化了...

    xml_DOM_SAX.rar_DOM_dom xml saxxml_java dom_sax

    在学习XML解析时,理解DOM和SAX的区别和适用场景是关键。DOM提供了灵活的数据访问,而SAX则侧重于高效的数据流处理。选择哪种解析方式取决于你的具体需求,如文件大小、性能要求以及数据处理的复杂性。通过实践,你...

    Android网络之数据解析----SAX方式解析XML数据

    这种方式使得SAX解析器在处理大型XML文件时,相比DOM(Document Object Model)解析器具有更低的内存消耗和更快的解析速度。 三、SAX解析流程 1. 创建XML解析器:首先,我们需要创建一个XMLReader对象,它是SAX...

    XML解析方式SAX和DOM比较

    为了处理XML文档,有两种主要的解析方式:SAX(Simple API for XML)和DOM(Document Object Model)。这两者在处理XML文档时有着显著的不同。 DOM解析方式是基于树形结构的,它将整个XML文档加载到内存中,形成一...

    android 三种方式解析XML(DOM,Pull,Sax) 带文件编码识别

    本篇文章将深入探讨三种在Android中解析XML的方法:DOM(文档对象模型)、Pull(拉取解析器)和SAX(简单API for XML),并且会特别强调如何识别文件编码。 首先,DOM解析是将整个XML文件加载到内存中形成一个树形...

    XML解析实践之DOM解析和SAX解析.rar

    在处理XML文件时,有两种主要的解析方式:DOM(Document Object Model)解析和SAX(Simple API for XML)解析。这两种解析方式各有特点,适用于不同的场景。 DOM解析是将整个XML文档加载到内存中,构建一个树形结构...

Global site tag (gtag.js) - Google Analytics