DOM和SAX
W3C@H_404_5@制定了一套书写XML@H_404_5@分析器的标准接口规范--DOM@H_404_5@。
除此之外,XML_DEV@H_404_5@邮件列表中的成员根据应用的需求也自发地定义了一套对XML@H_404_5@文档进行操作的接口规范--SAX@H_404_5@。这两种接口规范各有侧重,互有长短,应用都比较广泛。
下面,我们给出DOM@H_404_5@和SAX@H_404_5@在应用程序开发过程中所处地位的示意图。从图中可以看出,应用程序不是直接对XML@H_404_5@文档进行操作的,而是首先由XML@H_404_5@分析器对XML@H_404_5@文档进行分析,然后,应用程序通过XML@H_404_5@分析器所提供的DOM@H_404_5@接口或SAX@H_404_5@接口对分析结果进行操作,从而间接地实现了对XML@H_404_5@文档的访问。
DOM
DOM@H_404_5@的全称是DocumentObjectModel@H_404_5@,也即文档对象模型。在应用程序中,基于DOM@H_404_5@的XML@H_404_5@分析器将一个XML@H_404_5@文档转换成一个对象模型的集合(通常称DOM@H_404_5@树),应用程序正是通过对这个对象模型的操作,来实现对XML@H_404_5@文档数据的操作。通过DOM@H_404_5@接口,应用程序可以在任何时候访问XML@H_404_5@文档中的任何一部分数据,因此,这种利用DOM@H_404_5@接口的机制也被称作随机访问机制。
DOM@H_404_5@接口提供了一种通过分层对象模型来访问XML@H_404_5@文档信息的方式,这些分层对象模型依据XML@H_404_5@的文档结构形成了一棵节点树。无论XML@H_404_5@文档中所描述的是什么类型的信息,即便是制表数据、项目列表或一个文档,利用DOM@H_404_5@所生成的模型都是节点树的形式。也就是说,DOM@H_404_5@强制使用树模型来访问XML@H_404_5@文档中的信息。由于XML@H_404_5@本质上就是一种分层结构,所以这种描述方法是相当有效的。
DOM@H_404_5@树所提供的随机访问方式给应用程序的开发带来了很大的灵活性,它可以任意的控制整个XML@H_404_5@文档中的内容。然而由于DOM@H_404_5@分析器把整个XML@H_404_5@文档转化成DOM@H_404_5@树放在内存中,因此,当文档比较大或者结构比较复杂时,对内存的需求就比较高。而且,对于结构复杂的树的遍历也是一项耗时的操作。所以,DOM@H_404_5@分析器对机器性能的要求比较高,实现效率不十分理想。不过,由于DOM@H_404_5@分析器所采用的树结构的思想与XML@H_404_5@文档的结构相吻合,同时鉴于随访访问所带来的方便,因此,DOM@H_404_5@分析器还是有很广泛的使用价值的。
DOM@H_404_5@的四个基本接口
文档对象模型利用对象来把文档模型化,这些模型不仅描述了文档的机构,还定义了模型中对象的行为。换句话说,在上面给出的例子里,图中的节点不是数据结构,而是对象,对象中包含方法和属性。在DOM@H_404_5@中,对象模型要实现:
Ø用来表示。操作文档的接口
Ø接口的行为和属性
Ø接口之间的关系以及互操作
在DOM@H_404_5@接口规范中,有四个基本的额接口:Document,NodeNodeList@H_404_5@以及NamedNodeMap@H_404_5@。这这四个基本接口中,Document@H_404_5@接口是对文档进行操作的入口,它是从Node@H_404_5@接口继承过来的。Node@H_404_5@接口是其它大多数接口的父类,像Document@H_404_5@,Element@H_404_5@,Attribute@H_404_5@,Text,Comment@H_404_5@等接口都是从Node@H_404_5@接口继承过来的。NodeList@H_404_5@接口是一个节点的集合,通过该接口,可以建立节点和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。
- Document接口
Document@H_404_5@接口代表了整个XML/HTML@H_404_5@文档,因此,它是整棵文档树的根,提供了对文档中的数据进行访问和操作的入口。
由于元素。文本节点、注释、处理指令等都不能脱离文档的上下文关系而独立存在,所以在Document@H_404_5@接口提供了创建其它节点对象的方法,通过该方法创建的节点对象都有一个owenerDocument@H_404_5@属性,用来表明当前节点是由谁所创建的以及节点同Document@H_404_5@之间的联系。
在Dom@H_404_5@树中,Document@H_404_5@接口同其它接口之间的关系如下图所示:
- Node接口
Node@H_404_5@接口在整个DOM@H_404_5@树中具有举足轻重的地位,DOM@H_404_5@接口中有很大一部分接口是从Node@H_404_5@接口继承过来的,例如,Element.Attr@H_404_5@、等接口,都是从Node@H_404_5@继承过来的,在DOM@H_404_5@树中,Node@H_404_5@接口代表了树中的一个节点。一个典型的Node@H_404_5@接口如下图所示:
SAX
SAX@H_404_5@的全称是SimpleAPIforXML@H_404_5@,也即XML@H_404_5@简单应用程序接口。与DOM@H_404_5@不同,SAX@H_404_5@提供的访问模式是一种顺序模式,这是一种快速读写XML@H_404_5@数据的方式。
当使用SAX@H_404_5@分析器对XML@H_404_5@文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML@H_404_5@文档的访问,因而SAX@H_404_5@接口也被称作事件驱动接口。
SAX@H_404_5@分析器在对XML@H_404_5@文档进行分析时,触发了一系列事件,由于事件触发本身是有时序性的,因此,SAX@H_404_5@提供的是一种顺序访问机制,对于已经分析的部分,不能再倒回去重新处理。SAX@H_404_5@之所以被叫做“简单”应用程序接口,是因为SAX@H_404_5@分析器只做了些简单的工作,大部分工作还要由应用程序自己去做。也就是说,SAX@H_404_5@分析器在实现时,它只是顺序的检查XML@H_404_5@文档中的字节流,判断当字节是XML@H_404_5@语法中哪一部分、是否符合XML@H_404_5@语法,然后再触发相应的事件,而事件处理函数本身则要由应用程序自己来实现,同DOM@H_404_5@分析器相比,SAX@H_404_5@分析器缺乏灵活性,对于那些只需要访问XML@H_404_5@文档中的数据而不对文档进行更改的应用程序来说,SAX@H_404_5@分析器更为合适。
原文链接:https://www.f2er.com/xml/298897.html