文档对象模型DOM简介

上传人:feng****heng 文档编号:158199971 上传时间:2022-10-03 格式:DOCX 页数:12 大小:553.64KB
收藏 版权申诉 举报 下载
文档对象模型DOM简介_第1页
第1页 / 共12页
文档对象模型DOM简介_第2页
第2页 / 共12页
文档对象模型DOM简介_第3页
第3页 / 共12页
资源描述:

《文档对象模型DOM简介》由会员分享,可在线阅读,更多相关《文档对象模型DOM简介(12页珍藏版)》请在装配图网上搜索。

1、文档对象模型 DOM 简介(作者:蒋平)DOM的全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM 的 XML 分析器将一个 XML 文档转换成一个对象模型的集合(通常称 DOM 树),应用程 序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应 用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的 机制也被称作随机访问机制。DOM 接口提供了一种通过分层对象模型来访问 XML 文档信息的方式,这些分层对象 模型依据XML的文档结构形成了一棵节点树。无论XML文档中所描述的是什么类型的信 息,即便

2、是制表数据、项目列表或一个文档,利用DOM所生成的模型都是节点树的形式。 也就是说,DOM强制使用树模型来访问XML文档中的信息。由于XML本质上就是一种分 层结构,所以这种描述方法是相当有效的。对于XML应用开发来说,DOM就是一个对象化的XML数据接口,一个与语言无关、 与平台无关的标准接口规范。它定义了 HTML文档和XML文档的逻辑结构,给出了一种 访问和处理HTML文档和XML文档的方法。利用DOM,程序开发人员可以动态地创建文 档,遍历文档结构,添加、修改、删除文档内容,改变文档的显示方式等等。可以这样说, 文档代表的是数据,而DOM则代表了如何去处理这些数据。无论是在浏览器里还是

3、在浏览 器外,无论是在服务器上还是在客户端,只要有用到XML的地方,就会碰到对DOM的应 用。作为W3C的标准接口规范,目前,DOM由三部分组成,包括:核心(core)、HTML 和XML。核心部分是结构化文档比较底层对象的集合,这一部分所定义的对象已经完全可 以表达出任何HTML和XML文档中的数据了。HTML接口和XML接口两部分则是专为操 作具体的HTML文档和XML文档所提供的高级接口,使对这两类文件的操作更加方便。目前,DOM有两个版本,一个是由W3C于1998年8月18日通过的DOM Level 1, 另一个则是正在制定过程中的DOM Level 2, W3C已于2000年3月7日

4、通过了 DOM Level 2 的候选推荐版本。_、DOM 树前面我们讲过,DOM为我们提供的访问XML文档信息的媒介是一种分层对象模型, 而这个层次的结构,则是一棵根据XML文档生成的节点树。一个XML分析器,在对XML 文档进行分析之后,不管这个文档有多简单或者多复杂,其中的信息都会被转化成一棵对象 节点树。在这棵节点树中,有一个根节点-Document 节点,所有其他的节点都是根节点的 后代节点。节点树生成之后,就可以通过DOM接口访问、修改、添加、删除、创建树中的 节点和内容。以客户联系信息的例子来说明,下面给出一个XML文档片段:vname 张三 /namezhs vname 李四

5、v/namels 用 DOM 来表示这段文档,如图所示:Docnentzh费zmLnet. cnlsfeml .net. m,文档中所有的内容都是用节点来表示的。一个节点又可以包含其 他节点,节点本身还可能包含一些信息,例如节点的名字、节点值、节点类型等。文档中的 根实际上也是一个元素,之所以要把它单独列出来,是因为在XML文档中,所有其他元素 都是根元素的后代元素,而且根元素是唯一的,具有其他元素所不具有的某些特征。这个例子比较简单,事实上,DOM中还包含注释、处理指令、文档类型、实体、实体 引用、命名空间、事件、样式单等多种对象模型。文档对象模型利用对象来把文档模型化,这些模型不仅描述了文

6、档的结构,还定义了模 型中对象的行为。换句话说,在上面给出的例子里,图中的节点不是数据结构,而是对象, 对象中包含方法和属性。在DOM中,对象模型要实现:用来表示、操作文档的接口接口的行为和属性接口之间的关系以及互操作二、DOM的四个基本接口在DOM接口规范中,有四个基本的接口: Document, Node,NodeList以及NamedNodeMap。 在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来 的。Node 接口是其他大多数接口的父类,像 Document, Element, Attribute, Text, Comment 等接口都是从N

7、ode接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点 中的所有子节点。 NamedNodeMap 接口也是一个节点的集合,通过该接口,可以建立节点名 和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。下面将对这四个接 口分别做一些简单的介绍。1. Document 接口Document接口代表了整个XML/HTML文档,因此,它是整棵文档树的根,提供了对文档 中的数据进行访问和操作的入口。由于元素、文本节点、注释、处理指令等都不能脱离文档 的上下文关系而独立存在,所以在 Document 接口提供了创建其他节点对象的方法,通过该 方法创建的节点对象都有一个

8、 ownerDocument 属性,用来表明当前节点是由谁所创建的以及 节点同Document之间的联系。在DOM树中,Document接口同其他接口之间的关系如下图所 示:Docment. doctypeDocment. docuBjartEleBjent由图可以看出,Document节点是DOM树中的根节点,也即对XML文档进行操作的入口 节点。通过 Document 节点,可以访问到文档中的其他节点,如处理指令、注释、文档类型 以及XML文档的根元素节点等等。另外,从上图我们还可以看出,在一棵DOM树中,Document 节点可以包含多个处理指令、多个注释作为其子节点,而文档类型节点和X

9、ML文档根元素节 点都是唯一的。关于 Document 接口的 IDL(Interface DefinitionLanguage 接口定义语言) 定义和其中一些比较常用的属性和方法的详细介绍在许多参考书都可以找到,我们将在后面 结合实际例子给予介绍。2. Node 接口Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是从Node 接口继承过来的,例如, Element、 Attr、 CDATASection 等接口,都是从 Node 继承过来的。 在DOM树中,Node接口代表了树中的一个节点。一个典型的Node接口如下图所示:如图所示,Node接口提供了访问D0M

10、树中元素内容与信息的途径,并给出了对D0M树 中的元素进行遍历的支持。同样,我们将在后面结合实际例子详细说明Node接口的具体使 用方法。3. NodeList 接口NodeList 接口提供了对节点集合的抽象定义,它并不包含如何实现这个节点集的定义。 NodeList 用于表示有顺序关系的一组节点,比如某个节点的子节点序列。另外,它还出现 在一些方法的返回值中,例如GetNodeByName。在DOM中,NodeList的对象是live的,换 句话说,对文档的改变,会直接反映到相关的NodeList对象中。例如,如果通过DOM获得 一个NodeList对象,该对象中包含了某个Element节

11、点的所有子节点的集合,那么,当再 通过DOM对Element节点进行操作(添加、删除、改动节点中的子节点)时,这些改变将会 自动地反映到NodeList对象中,而不需DOM应用程序再做其他额外的操作。NodeList中的 每个item都可以通过一个索引来访问,该索引值从0开始。4. NamedNodeMap 接口实现了 NamedNodeMap 接口的对象中包含了可以通过名字来访问的一组节点的集合。不 过注意, NamedNodeMap 并不是从 NodeList 继承过来的,它所包含的节点集中的节点是无序 的。尽管这些节点也可以通过索引来进行访问,但这只是提供了枚举NamedNodeMap中

12、所包 含节点的一种简单方法,并不表明在DOM规范中为NamedNodeMap中的节点规定了一种排列 顺序。 NamedNodeMap 表示的是一组节点和其唯一名字的一一对应关系,这个接口主要用在 属性节点的表示上。与NodeList相同,在DOM中,NamedNodeMap对象也是live的。三、DOM的简单应用1、创建 Document 对象通过上面的介绍,我们已经对DOM接口有了部分了解,那么,这些接口以及接口中的属 性和方法又应该如何使用呢?这正是接下来所要讲述的内容。如前所述,利用DOM,程序开发人员可以动态地创建文档,遍历文档结构,添加、修改、 删除文档内容等等。在本节中,我们将通过

13、微软的XML分析器msxml,对DOM接口的这些应 用做一详细的介绍。首先,我们来讲一下一切操作的基础一创建Document对象。通过创建Document对象, 应用程序或者脚本就得到了对XML文档进行操作的入口。下面给出了使用不同的编程语言创 建 Document 对象的范例。JavaScript:var xmlDoc = new ActiveXObject(Microsoft.XMLDOM)VBScript:set xmlDoc = CreateObject(Microsoft.XMLDOM)VB:Dim xmlDoc As ObjectSetxmlDoc = CreateObject(M

14、icrosoft.XMLDOM)ASP:set xmlDoc = Server.CreateObject(Microsoft.XMLDOM)VC:HRESULT hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDocument(LPVOID*), &m_pXMLDocument)2、加载XML文档在 Document 对象创建之后,我们就得到了对文档进行操作的入口,那么,创建的这个 文档对象是如何同实际的XML文档关联在一起的呢?说来可笑,在W3C的DOM接口规范中, 没有任何一个地方定义

15、了 DOM 中的接口对象同实际文档相关联的方法。因此,不同的 XML 分析器所提供的加载XML文档的方法也不尽相同。在微软的msxml中,提供了一个load方 法来加载XML文档,建立DOM树同XML文档之间的关联。依旧以联系人列表信息的 XML 文档 client.xml 为例,可通过下述方式来加载文档:Dim myDocumentSet myDocument = CreatObject(Microsoft.XMLDOM)myDocument.async = FalsemyDocument.load(client.xml)XML文档被加载后,就在内存中形成了一棵DOM树,如图所示:namee

16、mailerriai 1皿m电张三宰四yBocnaent I祺节点束扌屈踐节贞包含疔干节点叫嫌肋供些侮口諏摄EXL节庚rwM换加二”塚加拜hipijrfhVa 11 J.p =Vtfl ill谊节虎杲一于显養节点、创两于F节点Ctxnun节点h屮瞬节咸是anai 111lame张三zXhSBsmL.血,cnLgtfcml. nwt”(3l在上面的代码中,root是文档的根元素节点addressbook节点,personNode和nameNode 都是元素类型的节点,textNode是TEXT类型的节点,theName是一个字符串。childNodes 是NodeList类型的属性,item是N

17、odeList接口中Node类型的属性,通过item可以访问 NodeList 节点集合中的任意节点(这儿有一点需要注意,当我们要访问根元素节点 addressbook 的第二个 person 子节点 personNode 时,我们用的索引参数是1,这是因为 item 中的索引参数是从 0 开始的,如果我们要访问节点集合中的第一个节点,则应该用 it em(0)来表示)。在D0M规范中,要访问元素节点的文本内容,需要先得到元素节点的TEXT子节点,再 通过TEXT节点的属性获取文本内容。微软在实现DOM接口时对DOM进行了部分扩展,可以 通过元素类型节点的 text 属性直接获得元素中的文本内

18、容。具体实用说明可以参考微软 msdn 中的帮助。上面的例子给出了如何访问DOM树中的元素节点,对于DOM树中的属性节点,访问方法 略有不同,可以通过下面的语句来实现:Attr = node.attributes.getNamedItem(sex)attrContent = attr.nodeValue上述访问语句执行后,attrContent的值是male。下图用黄色箭头标出了这一访问的getNamedItem 是 NamedNodeMap 接口中的方法。属性的内容可以通过属性节点的 nodeValue 来获得。4、添加元素目前,我们已经能够通过DOM获取XML文档中的信息了。如前所述,通过

19、DOM还可以动 态地更改 XML 文档中的内容。下面我们仍旧使用上面的 client.xml 文档,通过实例来说明 如何更改XML文档中的内容。假如我们希望在addressbook.xml中,给第一个person元素增添一个字符串为北大方 正的 company 元素,实现这一添加元素操作的语句如下:node = root.childNodes.item(0) newNode = myDocument . creat eEl ement(company) node.insertBefore(newNode,node.lastNode) textN ode = myDocumen t.crea t

20、Tex tN ode(北大方正) node.childNodes.item(1).appendChild(textNode)面给出了添加元素的操作示意图:addles sboclcnerlodeper蛊皿oo 吨 anymme北大方正啟三jDocwe&t l tex tladezh9znl lE. m5、删除元素现在,我们再把前一小节添加的元素删除,可通过下面的代码实现这一目的node = root.childNodes.item(0)oldNode = node.removeChild(node.childNodes.item(1)其中,oldNode中存放的是已被删除的节点。在删除某个节点

21、时,以该节点为根的子树 将整个被删除,因此得到的结果DOM树恢复原状。6、修改元素元素内容的改变包括元素名称、元素属性、元素所包含的文本内容等项目的改变。下面 仅就元素所包含的文本内容的改变给出一个范例,其他内容的改变实现方法与此类似。假如想把张三的电子邮件地址更改为zhs,通过下列语句就可以实现:node = root.childNodes.item(0)emailNode = node.childNodes.item(1) emailNode.childNodes. item(0).nodeValue = zhs下面给出了修改后的效果:addies sbookpersoneaaiUo de

22、mineemailmniHtnakmalejD octh entZhs8j4lll 血 CILkfcml.nei. m至此,我们已经把对 DOM 树的常用操作做了简单的介绍。一般说来,支持 DOM 的 XML 分析器通常会对DOM做一些扩展,这些扩展不属于D0M规范中的标准,但却给D0M树的操作 带来了方便,不同的分析器所做的扩展也不尽相同,可以通过查询相关技术支持资料或者帮 助来获取更多的信息。DOM对象属性FirstChildLastChildNextSiblingNodeNamenodeTypeparentNode previousSiblingSpecified附录A: DOM对象属性

23、表 1. 下表是只读类型的属性返回值返回一个对象(Object),表示第一个孩子节点(child node )。 返回一个对象(0bject),表示最后一个孩子节点(child node)。 返回一个对象(Object),表示下一个相邻的兄弟节点。返回节点对应的HTML标记。比如:P,Script。对应文本项节点, 返回#text。返回节点的类型,1表示此节点是标记(tag),2 表示属性(attribute),3表示文本项。返回一个对象(Object),表示当前节点的双亲节点(parent node )。 返回一个对象(Object),表示前一个相邻的兄弟节点。返回一个布尔型变量(Boole

24、an ),表示是否设置了属性值(attribute )。表 2. 下表是可读写类型的属性DOM对象属性返回值data nodeValue返回一个字符串,表示文本项节点的值。如果是其他类型节点,返 回 undefined。返回一个字符串,表示文本项节点的值。如果是其他类型节点,返 回 null。表 3. 下表是 DOM 中相关属性集合返回值DOM对象属性attributes childNodes表示节点的属性集合,通过id来访问,比如attributes.id。表示节点的孩子节点集合,通过数组索引方式访问,比如: childNodes2。附录 B:DOM 树中节点类型值与其数字值的对照表节点类型

25、数字值含义NODE_ELEMENT1元素NODE_ATTRIBUTE2属性NODE_TEXT3元素的文本内容NODE_CDATA_SECTION4CDATA片断NODE_ENTITY_REFERNCE5文档中对XML实体的引用NODE_ENTITY6扩展的实体NODE_PROCESSION_INSTRUCTION7XML处理指令NODE_COMMENT8注释NODE_DOCUMENT9文档根节点元素NODE_DOCUMENT_TYPE10文档类型声明NODE_DOCUMENT_FRAGMENT11文档片断(没有包含在文档中的节点或子树)NODE NOTATION12文档类型声明中用的符合整理:郭永洪时间:2006-05-04

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!