`
android_mylove
  • 浏览: 381330 次
社区版块
存档分类
最新评论

DOM和SAX(Document Object Model)

 
阅读更多

基于XML的程序结构如图

DOM、SAX是最主要的两种编程接口规范,Apache Xerces提供DOM和SAX API,支持多种语言

DOM概述

DOM是一个比XML更早的概念,例如IE中的DOM,可以通过JavaScript进行操作HTML
W3C的DOM可以看作是一个平台或语言的界面,允许程序和脚本动态地访问及更新文档的内容、结构、脚本程序。也就是说,DOM是一组API,它把XML文档作为对象,接口中包含了对文档的操作的属性和方法定义
DOM将XML文档看作树,根元素对应树的根节点,子元素对应子节点。利用DOM处理XML文档时,DOM处理器先把XML文档加载到内存中,在内存中,XML文档的逻辑结构以树的形式存在,对XML的操作都是建立在树的结构上的
DOM有3个版本,即DOM Level 1、2和3,已被MSXML等处理器支持的是1和2

DOM的结构

XML的所有一切都可以看作节点,包括文档本身、XML声明、注释、处理指令、根元素、子元素、元素的内容等

XML文档具有层次结构
根节点:对应整个XML文档,也叫文档节点
根元素:仅被文档节点饱含,也叫文档元素
注:属性节点不是元素节点的子节点

文档节点:是DOM树的根节点,根元素节点是它的一个子节点,接口为Document
元素节点:表示XML元素,可拥有子元素、文本子节点,是唯一具有属性的节点,接口为Element
文本节点:只能包含文本内容(或空白),可以使元素文本或属性值,接口为Text
属性节点:代表元素的属性,接口为Attr DOM树中实际没有属性节点,因为属性是依附于元素的
DOM的优缺点
优点:
整个文档结构和数据都在内存中,可以随时按照节点间的关系访问数据
节点的移动、插入、删除,结构和数据的修改,都在内存中进行
缺点:
受内存容量限制,不能处理大的文档
由于没有索引机制,处理效率较低
DOM的接口及实现
W3C的DOM是用IDL(接口描述语言)描述的与操作系统和程序设计语言无关的接口规范,并未规定实现这一规范的类(Class)或结构(Structure)
各软件厂商以软件包的形式实现DOM接口:
MSXML:支持DOM Level 2.0 core
JAXP:http://java.sun.com/j2se
DOM4j:可以看作JAXP的简化版http://www.dom4j.org

DOM程序设计

主要有三种用途:
处理XML文档:将XML加载至内存,以节点方式分析、处理XML文档,输出或保存XML文档
验证XML文档:将XML加载至内存,使用XML DTD或Schema验证XML文档
执行XSLT转换:加载XML、XSLT文档,并执行XSLT转换

SAX概述

SAX(Simple API for XML)采用流机制读取、分析XML文档。SAX由SAX项目组(http://www.saxproject.org)维护 ,Java源代码可到http://sourceforge.net下载
SAX是事件驱动的,包括解析器和处理器两部分。解析器对XML流进行解析,将元素、属性、文本、注释等作为“事件”顺序交由处理器进行处理。
SAX处理XML数据涉及以下步骤:
创建一个事件处理程序
创建 SAX 解析器
向解析器分配事件处理程序
解析文档,同时向事件处理程序发送每个事件
SAX在读取XML流的同时处理流
例如,对于XML文档:
<?xml version="1.0"?>
<samples>
<server>UNIX</server>
<monitor>color</monitor>
</samples>
分析该XML流时,一般将产生以下事件:
Start document
Start element (samples)
Characters (white space)
Start element (server)
Characters (UNIX)
End element (server)
Characters (white space)
Start element (monitor)
Characters (color)
End element (monitor)
Characters (white space)
End element (samples)
SAX API 允许开发人员捕捉这些事件并对它们作出反应
SAX解析器和处理器的接口定义位于org.xml.sax包中
XML解析器(XMLReader接口)
允许应用程序设置、查询解析器的功能和特性,注册处理文档的事件处理器,启动文档解析
事件处理器(ContentHandler接口)
SAX应用程序负责提供实现XMLReader接口的解析器类,其中事件处理器是要实现的主要的处理器之一,用于获得解析事件
错误处理器(ErrorHandler接口)
要实现定制的错误处理,就必须实现该接口

SAX的特征

流式处理机制,边读取便分析,内存中只保留XML片断
对内存要求低,可处理大型文档
可随时中断处理,而不必等待全部XML处理完毕,避免加载不必要的数据,可充分利用内存资源
SAX处理器是顺序的,已经分析过的数据将不能再反复处理,不适合修改或随机访问XML文档

分享到:
评论

相关推荐

    DOM和SAX概念的总结

    通常我们使用根据以下这些模型创建的API 来分析和操纵XML结构,这些模型可以是基于对象(基于树)的,如文档对象模型(Document Object Model,DOM);也可以是基于事件(基于流、推模型)的,如 Simple API for XML...

    dom4j api 参考手册

    org.dom4j.tree Contains the default implementations of the dom4j Document Object Model together with some helpful base classes for those wishing to implement their own document object model. org.dom4j...

    XML的DOM和SAX解析方式

    DOM即文档对象模型(document object model)。根据W3C的描述,DOM是一套用于HTML和XML文档的标准接口,它定义了文档的逻辑结构,以及访问或操作文档的方式。 DOM Parser会将文档解析为包含元素、属性和文本的树形...

    Python使用minidom读写xml的方法

    DOM(Document Object Model),通过构建一个树结构来表现整个xml文档,一旦树被构建,可以通过DOM提供了接口来遍历树和提取相应的数据。   python还提供了python独特的xml解析方法,相比于SAX和DOM更容易使用和...

    processing xml with java

    Preface Acknowledgements 1 XML for Data 2 XML Protocols 3 Writing XML with Java 4 Converting Flat Files to XML 5 Reading XML 6 SAX 7 The XMLReader Interface 8 SAX ...

    Android三种解析XML方式demo

    在Android平台上可以使用Simple?API?for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件

    XML解析教程

    DOM (Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的标准接口, DOM采用建立树形结构的方式访问XML文档. SAX(Simple API for XML) 不是某个官方标准,但它是 XML 社区事实上的标准,几乎所有的...

    MS XML 6.0 SDK 文档

    The Document Object Model (DOM), a standard library of application programming interfaces (APIs) for accessing XML documents. Helper APIs to assist with programming for XML namespace or the ...

    android读取xml文件

    在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。

    python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)

     DOM是Document Object Model的简称,XML 文档的高级树型表示。该模型并非只针对 Python,而是一种普通XML 模型。Python 的 DOM 包是基于 SAX 构建的,并且包括在 Python 2.0 的标准 XML 支持里。 一、xml.dom的...

    浅谈Android Studio 解析XML的三种方法

    一丶概述 文件解析要求,json解析和xml解析,前面文章说过Json转实体类,这里就说说解析XML...DOM(Document Object Model) 是一种用于XML文档的对象模型,可用于直接访问XML文档的各个部分。它是一次性全部将内容加载在

    DOM 文档对象模型

    DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中导航寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而 DOM 被认为是...

    android_RSS经典开发教程

    • DOM:文档对象模型(Document Object Model) • GUI:图形用户界面(Graphical user interface) • HTTP:超文本传输协议(Hyper Text Transport Protocol) • RSS:真正简单的连锁(Really Simple ...

    axiom-api-1.2.10.jar

    使用 XMLBench Document Model Benchmark 测试的结果表明,AXIOM 的性能和现有的高性能对象模型相当。但是 AXIOM 的内存占用要好于现有多数依靠 SAX 和/或 DOM 输入输出的对象模型。因此对于 Web 服务引擎或内存受...

    XML processing with Java

    Document Object Model (DOM) Level 2 • Using DOM to display the outline of an XML document in a JTree • Responding to individual XML parsing events with the Simple API for XML Parsing (SAX) 2.0 • ...

    Android读写XML.docx

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

    用Java处理XML数据

    看起来这是个常规性的动作。不知道什么时候你需要...  DOM :Document Object Model 顾名思义是在内存中构建树形结构。处理小的XML文件还算勉强应付。如果文件比较大,他需要一次性装载整个XML,你会忍不了他的速度,

    JAVA解析XML的四种方法比较

    对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible ...

    详解Java解析XML的四种方法

    对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible ...

    JAVA解析XML的_比较方法

    对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible ...

Global site tag (gtag.js) - Google Analytics