DOM模型:

1、什么是DOM?

  DOM 定义了访问诸如 XML 和 XHTML 文档的标准。

“W3C 文档对象模型(DOM)是一个使程序和脚本有能力动态地访问和更新文档的内容、结构以及样式的平台和语言中立的接口。”

  DOM 将 XML 文档作为一个树形结构,而树叶被定义为节点。DOM定义了一个Node接口,用于表示文档树中一个节点。从Node接口派生出了更多的具体接口,例如Document接口、Element接口、Attr接口。

2、节点类型

  DOM 是这样规定的:

  • 整个文档是一个文档节点
  • 每个 XML 标签是一个元素节点
  • 包含在 XML 元素中的文本是文本节点
  • 每一个 XML 属性是一个属性节点
  • 注释属于注释节点

3、DOM解析器工厂模式

  在javax.xml.parsers包中定义了DOM解析器工厂类DocumentBuildFactory,用于产生DOM解析器。DocumentBuildFactory是一个抽象类,在这个类中提供了一个静态的方法newInstance( ),用于创建工厂类的一个实例。

DocumentBuildFactory factory = DocumentBuildFactory.newInstance();

DoucmentBuild build = factory.newDocumentBuilder();                                        

  DocumentBuild类也是一个抽象类,调用DocumentBuildFactorynewInstance( )方法得到具体厂商的工厂类的实例后,再利用其newDocumentBuilder( )方法,得到具体厂商的DOM解析器对象。

  DocumentBuilder类提供了parse()方法,用于解析XML文档的内容,返回一个表示整个文档的Document对象。Parse()方法的参数可以是File类、InputSource类、InputStream类或表示XML文件的URI

4、DOM缺点:在使用DOM解析XML文档是,需要读入整个XML文档,然后在内存中创建DOM树,生成DOM树上的每个节点对象。只有在整个DOM树创建完成后,才能进行其它的操作。当XML文档比较大时,构建DOM树将花费大量的时间和内存。

SAX(Simple API For XML):

1、什么是SAX

  SAX 是基于事件驱动的API。用SAX模型来解析xml文档时,要涉及到解析器和事件处理器解析器负责解析xml文档,并向事件处理器发送请求;而事件处理器负责对事件作出响应,对传递的XML数据进行处理

2、解析器产生的事件

SAX在解析文档时,一般会依次产生下列事件:

文档开始

       元素开始

              字符数据(可能是XML文档中的空白部分)

              元素开始

                     字符数据

              元素结束

              字符数据

       元素结束

文档结束

事件处理器中对事件做出响应的方法也叫做回调方法(callback method)。

3、解析器、事件处理器

 

  XMLReader是SAX2.0解析器必须实现的接口,这个接口允许应用程序设置和查询解析器功能和特性,可以注册用户自定义的事件处理器,以及文档解析。解析器提供商负责提供实现XMLReader接口的解析器类,用户只需编写事件处理器程序即可。

  ContentHandler接口是一个主要的事件处理器接口。如果应用程序要获得基本的解析事件,它就要实现这个接口,并使用XMLReader对象的setContentHandler()方法向解析器注册一个ContentHandler实例。解析器使用这个实例来报告与文档相关的基本事件。

4、SAX解析器工厂类

 

  JAXP也为SAX解析器提供了工厂类——SAXParserFactory类。SAX解析器工厂类的实例与DOM解析器工厂类的实例类似,都是通过newInstance( )方法来创建的。JAXP中定义的SAX解析器类是SAXParser(相当于DOM中的DocumentBuilder类,获取方法也类似)。实际上SAXParserJAXPXMLReader实现类的一个包装类。在SAXParser中定义了返回XMLReader实例的方法getXMLReader( )XMLReaderSAXParser中都有parse( )方法,并且是等效的。但SAXParser中的parse( )方法使用范围更广,因为它能接受更多的参数,对不同的XML文档数据源进行解析。

 

 

 

 

posted on 2014-05-19 20:49  aviva虹  阅读(263)  评论(0编辑  收藏  举报