`
zhaole609
  • 浏览: 342787 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

sax解析原理

XML 
阅读更多
SAX的原理
SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
大多数SAX实现都会产生以下类型的事件:
在文档内每一XML元素接受解析的前后触发元素事件。
在文档的开始和结束时触发文档处理事件。
在处理文档的DTD或Schema时产生DTD或Schema事件。
任何元数据通常都由单独的事件交付。
产生错误事件用来通知主机应用程序解析错误。
对于如下文档:
<doc>
<para>Hello, world!</para>

<title>sax parse xml</title>
</doc>

在解析文档的过程中会产生如下一系列事件:

start document
start element: doc


start element: para
characters: Hello, world!
end element: para

stat element:title

characters:sax parse xml

end element:title
end element: doc
end document
一个完整的SAX处理过程涉及如下几个步骤:
(1)创建事件处理程序。
(2)创建SAX解析器。
(4)对文档进行解析,将每个事件发送给处理程序。
(3)将事件处理程序分配给解析器。

只有将一个标签解析完了,才能添加到list;


SAX的优缺点
SAX的优点:
解析速度快
ContentHandler对象可以是多个
内存消耗少
SAX的缺点:
必须实现事件处理程序
不能修改文档
不能随机访问
SAX解析器对文档的解析过程是一种边解析边执行的过程
SAX解析器对文档的解析过程中,无需把整个文档都加载到内存中
使用SAX解析器时,可以注册多个ContentHandler对象,并行接收事件
SAX解析器对文档的解析是顺序进行的
使用SAX对文档进行解析,只能访问文档内容,无法做到向文档中添加节点,更不能删除和修改文档中的内容。
SAX的常用接口介绍
ContentHandler接口
ContentHandler是Java类包中一个特殊的SAX接口,位于org.xml.sax包中。该接口封装了一些对事件处理的方法,当XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束、元素开头和结束、以及元素中的字符数据等事件。当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件。
ContentHandler接口的方法有以下几种:
void startDocument()
void characters(char[ ] ch, int start, int length)
void endDocument()
void startElement(String uri, String localName, String qName, Attributes atts)
void endElement(String uri, String localName, String qName)
DTDHandler接口
DTDHandler用于接收基本的DTD相关事件的通知。该接口位于org.xml.sax包中。此接口仅包括DTD事件的注释和未解析的实体声明部分。SAX解析器可按任何顺序报告这些事件,而不管声明注释和未解析实体时所采用的顺序;但是,必须在文档处理程序的startDocument()事件之后,在第一个startElement()事件之前报告所有的DTD事件。
DTDHandler接口包括以下两个方法:
void startDocumevoid notationDecl(String name, String publicId, String systemId) nt()
void unparsedEntityDecl(String name, String publicId, String systemId, String notationName)
接收注释声明事件的通知
接收未解析的实体声明事件的通知
EntityResolver接口
EntityResolver接口是用于解析实体的基本接口,该接口位于org.xml.sax包中。
该接口只有一个方法,如下:
public InputSource resolveEntity(String publicId, String systemId)
允许应用程序解析外部实体。并返回一个InputSource类的对象或者为null,用于读取实体信息
解析器将在打开任何外部实体前调用此方法。此类实体包括在DTD内引用的外部DTD子集和外部参数实体和在文档元素内引用的外部通用实体等。如果SAX应用程序需要实现自定义处理外部实体,则必须实现此接口。
ErrorHandler接口
ErrorHandler接口是SAX错误处理程序的基本接口。如果SAX应用程序需要实现自定义的错误处理,则它必须实现此接口,然后解析器将通过此接口报告所有的错误和警告。
该接口的方法如下:
void error(SAXParseException exception)
void fatalError(SAXParseException exception)
接收可恢复的错误通知
接收不可恢复的错误通知
void warning(SAXParseException exception)
接收警告的通知

分享到:
评论

相关推荐

    xml文件解析SAX

    1. **SAX解析原理**: - SAX解析器逐行读取XML文件,当遇到文档的开始、元素开始、元素结束、文本内容、注释等事件时,会调用预先注册的处理器接口(如`ContentHandler`)中的方法。 - 解析器并不关心这些事件的...

    Sax解析XML文件解析

    **SAX解析XML的基本原理:** SAX解析器以流式的方式读取XML文档,当遇到文档的各个元素时,会触发相应的事件,如开始文档、开始元素、结束元素、字符数据等。程序员通过实现SAX解析器的回调接口来处理这些事件,从而...

    SAX解析XML

    SAX解析原理 SAX解析器读取XML文档时,遇到元素开始、结束、属性、文本等结构,会触发相应的事件,并调用预先注册的事件处理器(如ContentHandler)中的方法。这种方法不需要将整个XML文档加载到内存,因此非常...

    java sax 解析xml

    1. **SAX解析原理**: - SAX解析器读取XML文件,遇到每个元素、属性、文本等,都会触发一个相应的事件。 - 应用程序通过实现SAX解析器的回调接口,定义处理这些事件的方法。 - 当解析器遇到XML文档的某个部分时,...

    Android XML解析——Sax解析XML

    ### SAX解析原理 SAX解析器以流式方式读取XML文档,遇到元素、属性等结构时会触发相应的事件回调。开发者需要定义一个ContentHandler类来处理这些事件,如开始元素、结束元素、字符数据等。这种方式避免了整个XML...

    Android之SAX解析XML

    SAX解析原理 SAX解析器逐行扫描XML文档,当遇到如元素开始、结束、字符数据等事件时,会调用预先定义好的回调函数。这种方式称为“推”模型,因为解析器主动将信息推送给应用程序。相比DOM解析(将整个XML文档加载...

    sax解析xml源代码

    **SAX解析原理** SAX解析器以事件驱动的方式工作,当遇到XML文档中的元素、属性、文本等节点时,会触发相应的回调函数。开发者需要实现这些回调函数,以处理解析过程中遇到的数据。这种方式使得SAX解析器不需要一次...

    安卓SAX解析xml

    1. **SAX解析原理**: - 事件驱动:SAX解析器在读取XML文件时,会触发一系列事件,如开始文档、开始元素、字符数据、结束元素等。 - 非推挽式:解析器从输入源读取数据,一旦遇到某个事件,就立即通知应用程序,不...

    sax解析xml文件

    首先,我们需要理解SAX解析的基本原理。当解析器读取XML文件时,它会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素等。开发者通过实现SAX解析器的回调接口,为这些事件编写处理方法。例如: 1. `...

    android使用sax解析本地xml

    ### 一、SAX解析原理 SAX解析器按照顺序逐个读取XML文档的节点,并触发相应的事件回调,如开始文档、结束文档、开始元素、结束元素等。开发者需要实现这些回调方法来处理解析过程中的事件。这种方式对内存消耗较小...

    Servlet利用SAX解析XML文档

    首先,我们需要了解SAX解析的基本原理。SAX解析器不创建整个XML文档树,而是当遇到XML文档的各个部分(如元素、属性、文本等)时,触发相应的事件回调函数。开发者通过实现SAX解析器的ContentHandler接口,定义这些...

    android使用SAX解析xml

    本篇文章将详细介绍如何在Android环境中使用SAX解析器来处理从网络获取的XML文件。 1. **XML与SAX解析基础** - XML是一种结构化的文本数据表示方式,它定义了标签、属性等规则,使数据具有自解释性。 - SAX解析器...

    dom4j下sax解析xml

    这样的测试项目有助于理解SAX解析的工作原理,并在实际开发中应用。 总结起来,dom4j库提供了DOM和SAX两种XML解析方式,而SAX解析在处理大文件时具有性能优势。通过注册事件处理器,开发者可以在解析过程中动态响应...

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

    SAX解析的基本工作原理是通过事件处理器(如ContentHandler、EntityResolver等)来接收XML文档的解析事件,如开始文档、结束文档、开始元素、结束元素、字符数据等。当解析器遇到这些事件时,会调用相应的处理器方法...

    Sax解析xml文件

    SAX解析器的工作原理是基于事件驱动的,它在解析XML文档时会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素等。开发者通过实现SAX解析器的回调接口(如ContentHandler),在这些事件发生时执行相应的...

    XML通过sax解析JSON格式

    XML(eXtensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛使用的数据交换格式,它们在Web服务和应用程序...通过理解XML和JSON的差异以及SAX解析的工作原理,我们可以构建出高效的转换工具。

    数据sax解析

    本文将深入探讨SAX解析的基本原理、工作流程以及如何在实际编程中运用。 ### SAX解析基本概念 SAX解析器逐行读取XML文件,遇到元素、属性、文本等结构时,会触发相应的事件,调用预先定义好的回调方法。这种方法...

    SAX解析.pdf

    SAX解析是一种流式的XML解析方式,它使用了一种基于事件的模型来处理XML文档。开发者不需要在内存中构建整个文档的树形结构,而是通过响应XML解析器发出的事件来处理XML文档。这种方式特别适合处理大型的XML文件,...

    一个关于sax解析xml的demo

    SAX解析的基本原理是读取XML文档,当遇到文档的开始、结束、元素、属性等结构时,会触发相应的事件处理器方法。程序员通过实现SAX解析器的回调接口,为这些事件编写处理代码,从而解析XML数据。以下是一些关键的SAX...

Global site tag (gtag.js) - Google Analytics