XML第十六讲:SAX方式解析XML文档深入详解
2013-03-29 11:54
429 查看
前面我讲到了两种解析XML的方法,一种是DOM解析,另外一种是SAX解析,DOM解析我们已经剖析过了,现在我们来讲一下SAX解析
1.
SAX(Simple APIs for XML),面向XML的简单APIs。
2. 比较一下两种解析方式的不同
使用DOM解析XML时,首先将XML文档加载到内存当中,然后可以通过随机的方式访问内存中的DOM树;SAX是基于事件而且是顺序执行的,一旦经过了某个元素,我们就没有办法再去访问它了,SAX不必事先将整个XML文档加载到内存当中,因此它占据内存要比DOM小,对于大型的XML文档来说,通常会使用SAX而不是DOM进行解析,主要是防止内存溢出的发生。
3. SAX依然用的观察者模式,(类似于GUI中的事件),在解析XML的过程中遇到一个标签,则执行相应的事件。
SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。
SAX分析器在对XML文档进行分析时,触发了一系列的事件,由于事件触发本身是有时序性的,因此,SAX提供的是一种顺序访问机制,对于已经分析过的部分,不能再倒回去重新处理。SAX之所以被叫做"简单"应用程序接口,是因为SAX分析器只做了一些简单的工作,大部分工作还要由应用程序自己去做。也就是说,SAX分析器在实现时,它只是顺序地检查XML文档中的字节流,判断当前字节是XML语法中的哪一部分、是否符合XML语法,然后再触发相应的事件,而事件处理函数本身则要由应用程序自己来实现。同DOM分析器相比,SAX分析器缺乏灵活性。然而,由于SAX分析器实现简单,对内存要求比较低,因此实现效率比较高,对于那些只需要访问XML文档中的数据而不对文档进行更改的应用程序来说,SAX分析器更为合适。
[说明]:我们所要做的事情就是针对不同的回调,把里面的方法该实现的实现出来。
4. SAX分析器的大体构成框架
图中最上方的SAXParserFactory用来生成一个解析器实例(也就是类似DOM解析器中的解析器工厂)。XML文档是从左侧箭头所示处读入,当解析器对文档进行分析时,就会触发在DocumentHandler,ErrorHandler,DTDHandler以及EntityResolver接口中定义的回调方法。
5. SAX基础
1)SAX是事件驱动的,文档的读入过程就是SAX的解析过程。
2)在读入的过程中,遇到不同的项目,解析器会调用不同的处理方法。
可以对比一下GUI中的按钮触发事件,SAX解析跟那个道理是一模一样的。
6. 下面我们来查看JDK文档中了解一下常用的事件处理方法
1)创建工厂,和DOM类似,SAXParserFactory 也是一个抽象类。调用SAXParserFactory类的newInstance()方法,返回
SAXParserFactory 的实例。
public
abstract class SAXParserFactory extends Object
Defines a factory API that enables applications to configure and obtain a SAX based parser to parse XML documents.
public
static SAXParserFactory newInstance()
Obtain a new instance of a SAXParserFactory.
2) 调用SAXParserFactory的newSAXParser()得到SAX的解析器
public
abstract SAXParser newSAXParser() throws ParserConfigurationException, SAXException
Creates a new instance of a SAXParser using the currently configured factory parameters.
3)通过parse()方法就可以读入XML,这里面还有一个DefaultHandler参数,默认使用SAX的处理器。
public void parse(File
f, DefaultHandler dh) throws SAXException, IOException
Parse the content of the file specified as XML using the specified DefaultHandler.
Parameters:
f - The file containing the XML to parse
dh - The SAX DefaultHandler to use.
4)进入DefaultHandler
类里面,可以发现有很多通知触发解析事件的方法:
startDocument():接受文档开始的通知。
public
void startDocument()throws SAXException
Receive notification of the beginning of the document.
endDocument():接受文档结束的通知
public
void endDocument() throws SAXException
Receive notification of the end of the document.
startElement():
接受元素开始的通知
public void startElement(String uri,String localName,String qName, Attributes attributes)throws
SAXException
Receive notification of the start of an element.
characters():
接受元素中间内容的通知。它会讲文本内容转换为字符串
public
void characters(char[] ch, int start,int length)throws SAXException
Receive notification of character data inside an element.
图表示:org.xml.sax.helpers.DefaultHandler类的方法
下一讲 :代码实现SAX解析XML具体使用用法我们将深入讲解SAX解析XML的用法。
1.
SAX(Simple APIs for XML),面向XML的简单APIs。
2. 比较一下两种解析方式的不同
使用DOM解析XML时,首先将XML文档加载到内存当中,然后可以通过随机的方式访问内存中的DOM树;SAX是基于事件而且是顺序执行的,一旦经过了某个元素,我们就没有办法再去访问它了,SAX不必事先将整个XML文档加载到内存当中,因此它占据内存要比DOM小,对于大型的XML文档来说,通常会使用SAX而不是DOM进行解析,主要是防止内存溢出的发生。
3. SAX依然用的观察者模式,(类似于GUI中的事件),在解析XML的过程中遇到一个标签,则执行相应的事件。
SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。
SAX分析器在对XML文档进行分析时,触发了一系列的事件,由于事件触发本身是有时序性的,因此,SAX提供的是一种顺序访问机制,对于已经分析过的部分,不能再倒回去重新处理。SAX之所以被叫做"简单"应用程序接口,是因为SAX分析器只做了一些简单的工作,大部分工作还要由应用程序自己去做。也就是说,SAX分析器在实现时,它只是顺序地检查XML文档中的字节流,判断当前字节是XML语法中的哪一部分、是否符合XML语法,然后再触发相应的事件,而事件处理函数本身则要由应用程序自己来实现。同DOM分析器相比,SAX分析器缺乏灵活性。然而,由于SAX分析器实现简单,对内存要求比较低,因此实现效率比较高,对于那些只需要访问XML文档中的数据而不对文档进行更改的应用程序来说,SAX分析器更为合适。
[说明]:我们所要做的事情就是针对不同的回调,把里面的方法该实现的实现出来。
4. SAX分析器的大体构成框架
图中最上方的SAXParserFactory用来生成一个解析器实例(也就是类似DOM解析器中的解析器工厂)。XML文档是从左侧箭头所示处读入,当解析器对文档进行分析时,就会触发在DocumentHandler,ErrorHandler,DTDHandler以及EntityResolver接口中定义的回调方法。
5. SAX基础
1)SAX是事件驱动的,文档的读入过程就是SAX的解析过程。
2)在读入的过程中,遇到不同的项目,解析器会调用不同的处理方法。
可以对比一下GUI中的按钮触发事件,SAX解析跟那个道理是一模一样的。
6. 下面我们来查看JDK文档中了解一下常用的事件处理方法
1)创建工厂,和DOM类似,SAXParserFactory 也是一个抽象类。调用SAXParserFactory类的newInstance()方法,返回
SAXParserFactory 的实例。
public
abstract class SAXParserFactory extends Object
Defines a factory API that enables applications to configure and obtain a SAX based parser to parse XML documents.
public
static SAXParserFactory newInstance()
Obtain a new instance of a SAXParserFactory.
2) 调用SAXParserFactory的newSAXParser()得到SAX的解析器
public
abstract SAXParser newSAXParser() throws ParserConfigurationException, SAXException
Creates a new instance of a SAXParser using the currently configured factory parameters.
3)通过parse()方法就可以读入XML,这里面还有一个DefaultHandler参数,默认使用SAX的处理器。
public void parse(File
f, DefaultHandler dh) throws SAXException, IOException
Parse the content of the file specified as XML using the specified DefaultHandler.
Parameters:
f - The file containing the XML to parse
dh - The SAX DefaultHandler to use.
4)进入DefaultHandler
类里面,可以发现有很多通知触发解析事件的方法:
startDocument():接受文档开始的通知。
public
void startDocument()throws SAXException
Receive notification of the beginning of the document.
endDocument():接受文档结束的通知
public
void endDocument() throws SAXException
Receive notification of the end of the document.
startElement():
接受元素开始的通知
public void startElement(String uri,String localName,String qName, Attributes attributes)throws
SAXException
Receive notification of the start of an element.
characters():
接受元素中间内容的通知。它会讲文本内容转换为字符串
public
void characters(char[] ch, int start,int length)throws SAXException
Receive notification of character data inside an element.
图表示:org.xml.sax.helpers.DefaultHandler类的方法
下一讲 :代码实现SAX解析XML具体使用用法我们将深入讲解SAX解析XML的用法。
相关文章推荐
- XML第十六讲:SAX方式解析XML文档深入详解 续
- JavaWeb 之 XML文档的DOM和SAX解析方式详解
- JavaWeb 之 XML文档的DOM和SAX解析方式详解
- JavaEE实战——XML文档DOM、SAX、STAX解析方式详解
- XML文档的DOM和SAX解析方式详解
- sax方式解析xml文档
- JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之详解与比较
- 详解android解析Xml的三种方式——DOM、SAX以及XMLpull
- Android 使用Dom与SAX解析xml文档的方式
- Android创建与解析XML(三)――详解Sax方式
- JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之详解与比较
- android中用SAX方式解析XML文档
- 解析XML文档方式之二:sax方式
- XML文档的SAX解析方式
- java(12)--xml之sax方式解析文档
- xml文档的SAX解析的详解
- DOM方式解析XML文档(另2种方式为SAX,STAX),(第二种直接用sax方式用java类实现)
- XML文档常用解析方式DOM、SAX、JDOM、DOM4J的比较
- 详解android解析Xml的三种方式——DOM、SAX以及XMLpull
- 详解android解析Xml的三种方式——DOM、SAX以及XMLpull