使用DOM访问XML文档.ppt
第第7 7章章 使用使用DOMDOM访问访问XMLXML文档文档7.1 DOM7.1 DOM概述概述 7.1DOMDOM对象架构对象架构7.2 DOMDOM客户端编程访问客户端编程访问XMLXML7.3DOMDOM服务器端编程访问服务器端编程访问XMLXML7.47.1 DOM7.1 DOM概述概述7.1.1 DOM简介简介DOM的中文含义为文档对象模型,由一组代表的中文含义为文档对象模型,由一组代表HTML文文档或者档或者XML文档中不同组成部分的程序对象组成,这些文档中不同组成部分的程序对象组成,这些对象提供了各自的属性和方法,使得应用程序开发者能对象提供了各自的属性和方法,使得应用程序开发者能够通过编写脚本程序来操纵和显示文档中相应的组件。够通过编写脚本程序来操纵和显示文档中相应的组件。使用使用DOM技术访问技术访问XML文档,具有强大的功能和灵活性,文档,具有强大的功能和灵活性,不仅可用来编写访问本地不仅可用来编写访问本地XML文档的程序,还可用来编文档的程序,还可用来编写访问服务器端写访问服务器端XML文档的应用程序。文档的应用程序。可以把可以把DOM看作是一种看作是一种ActiveX对象,它绑定封对象,它绑定封装了若干个对装了若干个对XML文档进行访问的文档进行访问的API,应用程,应用程序开发者能够使用脚本语言来调用序开发者能够使用脚本语言来调用DOM对象的对象的属性与方法,达到访问、操作属性与方法,达到访问、操作XML文档各个组成文档各个组成部分的目的。部分的目的。DOM 以树状的层次节点来储存以树状的层次节点来储存XML文档中的所文档中的所有数据,可以使用有数据,可以使用DOM节点树来访问任何形式节点树来访问任何形式的的XML文档,并且可以使用文档,并且可以使用DOM提供的编程接提供的编程接口来显示和操纵口来显示和操纵XML文档中的任何组件,包括元文档中的任何组件,包括元素、属性、处理指令、注释及实体等。素、属性、处理指令、注释及实体等。7.1.2 DOM与与SAX除了除了DOM方式之外,方式之外,XML技术还提供了技术还提供了SAX方方式来读取和处理式来读取和处理XML文档的数据。文档的数据。SAX的英文名的英文名称为称为Simple API for XML,即应用于,即应用于XML的简单的简单API。DOM的运作方式是将整个文档读入内存,并根的运作方式是将整个文档读入内存,并根据文档中定义的元素及其属性构建一个树型结构据文档中定义的元素及其属性构建一个树型结构用来描述该文档。用来描述该文档。DOM方式提供了直接指向方式提供了直接指向XML文档各组成部分的文档各组成部分的API,给程序设计带来了,给程序设计带来了方便。但是,由于方便。但是,由于DOM方式首先将整个文档载方式首先将整个文档载入内存,然后生成一颗相应的节点对象树,当入内存,然后生成一颗相应的节点对象树,当XML文档的数据量比较大或文档结构比较复杂时,文档的数据量比较大或文档结构比较复杂时,将要占据大量的内存空间,其解析过程也会需要将要占据大量的内存空间,其解析过程也会需要比较长的时间。比较长的时间。SAX方式针对处理大型方式针对处理大型XML文档和高吞吐量的情文档和高吞吐量的情况作了优化,它会遍历整个文档,并逐一访问文况作了优化,它会遍历整个文档,并逐一访问文档中的每一项内容。档中的每一项内容。SAX方式的优点是:无论方式的优点是:无论XML文档有多大,都只将下一项内容载入内存中。文档有多大,都只将下一项内容载入内存中。因为忽略了为文档内容创建一颗对象树的过程,因为忽略了为文档内容创建一颗对象树的过程,而能更快地执行。而能更快地执行。与与DOM方式相比,方式相比,SAX方式对方式对XML文档的处理文档的处理缺乏一定的灵活性和规范性,并且缺乏一定的灵活性和规范性,并且SAX应用程序应用程序一般都比较长,所以本章将只介绍通过一般都比较长,所以本章将只介绍通过DOM方方式对式对XML文档的访问与处理。文档的访问与处理。7.1.3 DOM结构树结构树当当IE浏览器内含的浏览器内含的XML解析器处理被载入解析器处理被载入的的XML文档并根据文档的逻辑结构生成一文档并根据文档的逻辑结构生成一棵对应的棵对应的DOM树时,它会为树时,它会为XML文档中文档中的每一个基本组件建立一个树中的对应节的每一个基本组件建立一个树中的对应节点。这些基本组件包括元素、属性、注释、点。这些基本组件包括元素、属性、注释、实体与处理指令等,实体与处理指令等,DOM会使用不同类型会使用不同类型的节点来代表不同类型的的节点来代表不同类型的XML组件。表组件。表7-1列出了列出了DOM节点的各种类型及简短说明。节点的各种类型及简短说明。表表7-1 DOM节节点的各种点的各种类类型型节节点点类类型型说说 明明节节点名称点名称Document文档根文档根节节点(代表整个点(代表整个XML文档)文档)#documentElement元素元素节节点点元素的元素的实际实际名称名称 Attribute属性属性节节点点属性的属性的实际实际名称名称Text属于元素或属性的文本属于元素或属性的文本内容内容#TextProcessing Instruction 处处理指令理指令节节点点处处理指令的理指令的实际实际名称名称(例如(例如xml)Comment注注释节释节点点#commentCDATA SectionCDATA 区段区段#cdata-sectionDocumentType代表代表 的的节节点点DTD声明中的文声明中的文档档类类型名称型名称EntityDTD 中的中的 声明声明实实体名称(例如体名称(例如image)NotationDTD 中的符号声中的符号声明明符号名称(例如符号名称(例如BMP)对于书中的对于书中的CustomerDom.xml范例文档,将生成如下范例文档,将生成如下图所示的图所示的DOM结构树。结构树。7.2 DOM7.2 DOM对象架构对象架构7.2.1 DOM对象概述对象概述IE浏览器支持的浏览器支持的XML DOM为应用程序操为应用程序操纵和处理纵和处理XML文档提供了各种文档提供了各种DOM对象,对象,表表7-2列出了各种列出了各种XML DOM对象及其对应对象及其对应节点的简短说明。节点的简短说明。表表7-2 各种各种XML DOM对对象象对对 象象说说 明明XMLDOMDocument表示表示DOM树树的最的最顶层节顶层节点,即根点,即根节节点点XMLDOMNode表示表示DOM树树中除根中除根节节点之外的某一个点之外的某一个节节点点XMLDOMNodeList表示某个父表示某个父节节点之下的一系列兄弟点之下的一系列兄弟节节点的集合点的集合XMLDOMParseError返回返回错误错误信息,包括信息,包括错误编错误编号、出号、出错错位置等一些位置等一些相相应应的描述信息的描述信息XMLDOMAttribute代表一个属性代表一个属性节节点点XMLDOMDocumentType代表文档代表文档类类型描述的相关信息型描述的相关信息每一个不同的节点对象都有其特定的属性每一个不同的节点对象都有其特定的属性和方法,但也有许多共同的属性,表和方法,但也有许多共同的属性,表7-3列列出了各种类型节点对象共有的一组属性。出了各种类型节点对象共有的一组属性。表表7-3 所有所有类类型型节节点共有属性点共有属性属属 性性说说 明明attributes返回包含返回包含该节该节点所有属性的点所有属性的NamedNodeMap集合(只集合(只读读)childNodes返回包含返回包含该节该节点所有非属性子点所有非属性子节节点的点的NodeList集合(只集合(只读读)dataType返回返回该节该节点数据点数据类类型(可型(可读读写)写)firstChild该节该节点的第一个非属性的子点的第一个非属性的子节节点(只点(只读读)lastChild该节该节点的最后一个非属性子点的最后一个非属性子节节点(只点(只读读)nextSibling返回位于同一返回位于同一层级层级的下一个的下一个节节点(只点(只读读)nodeName返回返回该节该节点的名称(只点的名称(只读读)nodeType返回表示返回表示该节该节点点类类型的数型的数值码值码(只(只读读)nodeTypeString返回表示返回表示该节该节点点类类型的字符串(小写字母撰写,只型的字符串(小写字母撰写,只读读)nodeTypeValue返回返回该节该节点点类类型的型的值值(可(可读读写)写)nodeValue返回返回该节该节点的点的值值(如果不含(如果不含值则为值则为null)(可)(可读读写)写)ownerDocument返回包含本返回包含本节节点的点的Document根根节节点(只点(只读读)parentNode返回返回该节该节点的父点的父节节点(不适用于点(不适用于Attribute节节点,只点,只读读)previousSibling与本与本节节点位于同一点位于同一层级层级的前一个的前一个节节点(只点(只读读)text该节该节点与其后裔点与其后裔节节点的全部文字内容(可点的全部文字内容(可读读写)写)xml该节该节点与其后裔点与其后裔节节点的全部点的全部XML 内容(只内容(只读读)除了共同具有的属性之外,各种类型的节除了共同具有的属性之外,各种类型的节点对象都提供了特有的属性和方法,来处点对象都提供了特有的属性和方法,来处理该节点类型所代表的特殊理该节点类型所代表的特殊XML文档组件。文档组件。通过通过XML DOM对象的层次架构及其相关对象的层次架构及其相关的属性,程序员可以从当前节点出发访问的属性,程序员可以从当前节点出发访问各个节点的信息。各个节点的信息。7.2.2 Document对象对象Document对象代表对象代表XML DOM树的根节点,同树的根节点,同时代表了整个时代表了整个XML文档。该对象提供了对整个文文档。该对象提供了对整个文档或文档中的数据进行访问和操作的许多属性和档或文档中的数据进行访问和操作的许多属性和方法。方法。由于其他节点都是由于其他节点都是Document节点的子节点,所节点的子节点,所以通过以通过Document对象可以访问文档中的各种节对象可以访问文档中的各种节点,包括处理指令、注释、文档类型声明及根元点,包括处理指令、注释、文档类型声明及根元素节点等。素节点等。表表7-4列出了列出了Document对象的一些特有属性。对象的一些特有属性。表表7-4 Document 对对象的特有属性象的特有属性属属 性性说说 明明async默默认值为认值为TRUE,表示同步,表示同步载载入文档;若入文档;若为为FALSE,则为则为异步异步载载入入docType返回返回DTD的的DocumentType节节点点documentElement返回文档的根元素返回文档的根元素节节点点nameSpaceURL返回命名空返回命名空间间的的URL值值onDataAvailable若此属性指定若此属性指定为为撰写的函数名称,当撰写的函数名称,当XML 数据可取得数据可取得时时将将调调用用该该函数函数onReadyStateChange若将此属性指定若将此属性指定为为撰写的函数名,当撰写的函数名,当document的的readyState属性改属性改变时变时,将将调调用用该该函数函数parsed 若所有子若所有子节节点已被解析,点已被解析,返回返回TRUE,否,否则则返回返回FALSEparseError 返回返回处处理理XML 文件文件时发时发生生的任何的任何错误错误信息信息readyState 载载入和入和处处理理XML文档的文档的当前状当前状态态。0代表代表uninitialized、1代表代表loading、2代表代表loaded、3代表代表 interactive、4代表代表completedurl载载入的入的XML文档的文档的URL值值表表7-5列出了列出了Document对象的常用方法及其说明。对象的常用方法及其说明。表表7-5 Document对对象的常用方法象的常用方法方方 法法说说 明明abort终终止止XML文档的异步加文档的异步加载载appendChild(newChild)为为当前当前节节点增加一个子点增加一个子节节点点cloneNode(deep)复制当前复制当前节节点,若点,若deep为为TRUE,连连同所同所有子有子节节点一起复制;若点一起复制;若deep为为FALSE,仅仅复制当前复制当前节节点本身点本身createAttribute(name)创创建一个属性建一个属性createCDATASection(data)创创建一个建一个CDATA区段区段createComment(data)创创建一个注建一个注释释createElement(name)创创建一个元素建一个元素createEntityReference(name)创创建一个建一个实实体参考体参考createNode(type,name,namespaceURL)创创建一个指定建一个指定类类型和名称的型和名称的节节点点createProcessionInstruction(target,data)创创建一个建一个处处理指令理指令createTextNode(text)创创建一个指定内容的文本建一个指定内容的文本节节点点getElementsByTagName(name)返回文档中返回文档中拥拥有特定有特定类类型名称的型名称的所有元素列表。如果参数所有元素列表。如果参数为为“*”将将返回所有元素返回所有元素hasChildNodes若当前若当前节节点有子点有子节节点,返回点,返回TRUE;否;否则则返回返回FALSEinsertBefore(newNode,refNode)将一个将一个newNode插入到插入到refNode之前之前load(URL)载载入并解析由入并解析由URL指定的文档指定的文档loadXML(stringDoc)载载入并解析由入并解析由stringDoc指定的指定的XML文档文档nodeFromID(id-value)返回返回ID 类类型属性型属性值为值为id-value一一个个节节点点removeChild(Child)删删除指定的子除指定的子节节点点replaceChild(newChild,oldChild)用用newChild子子节节点替代点替代oldChild子子节节点点save(stringDoc)将将DOM树树数据存入由数据存入由stringDoc指定的指定的XML文档文档selectNodes(pattern)取得符合指定取得符合指定类类型的所有型的所有节节点点selectSingleNodes(pattern)取得符合指定取得符合指定类类型的第一个型的第一个节节点点transformNode(stylesheetObj)用含有指定的用含有指定的样样式表式表对对象象实实例来例来转转换换XML文档,将文档,将转换结转换结果以字符串果以字符串形式返回形式返回transformNodeToObject(stylesheetObj,outObj)用含有指定的用含有指定的样样式表式表对对象象实实例来例来转转换换XML文档,并将文档,并将转换结转换结果写入到果写入到outObj对对象象7.2.3 Node对象对象在在XML DOM树中,除了根节点之外,每树中,除了根节点之外,每一个节点都是一个一个节点都是一个Node对象。所以对象。所以Node对对象可以对应于象可以对应于XML文档中的任意一个元素、文档中的任意一个元素、属性、处理指令或注释等。属性、处理指令或注释等。Node对象所具有的属性与所有对象共有的对象所具有的属性与所有对象共有的属性基本相同,利用属性基本相同,利用Node对象具有的一些对象具有的一些方法则可操纵当前节点及其子节点。方法则可操纵当前节点及其子节点。表表7-6 Node对对象的常用方法象的常用方法方方 法法说说 明明appendChild(newChild)为为当前当前节节点增加一个子点增加一个子节节点点cloneNode(deep)复制当前复制当前节节点,若点,若deep为为TRUE,连连同所有子同所有子节节点一起复点一起复制;若制;若deep为为FALSE,则仅则仅复复制当前制当前节节点本身点本身hasChildNodes若当前若当前节节点有子点有子节节点返回点返回TRUE,否,否则则返回返回FALSE表表7-6列出了列出了Node对象的常用方法及其说明。对象的常用方法及其说明。insertBefore(newNode,refNode)将一个将一个newNode插入到插入到refNode之前之前removeChild(Child)删删除指定的子除指定的子节节点点replaceChild(newChild,oldChild)用用newChild替代替代oldChildselectNodes(pattern)取得符合指定取得符合指定类类型的所有型的所有节节点点selectSingleNodes(pattern)取得符合指定取得符合指定类类型的第一个型的第一个节节点点transformNode(styleSheetOBJ)利用指定的利用指定的样样式表来式表来变换变换当前当前节节点点及其子及其子节节点点7.2.4 NodeList对象对象NodeList对象是一系列相关节点的集合。对象是一系列相关节点的集合。例如,引用某个节点的例如,引用某个节点的childNodes 属性将属性将返回一个包含该节点所有非属性子节点的返回一个包含该节点所有非属性子节点的NodeList对象。此外,调用某个节点对象对象。此外,调用某个节点对象的的getNodeByName方法或者方法或者selectNodes方方法,也可获得一个相应的法,也可获得一个相应的NodeList对象。对象。表表7-7则为则为NodeList 对象的方法及简要说对象的方法及简要说明。明。要从要从NodeList 集合对象中取得一个指定的集合对象中取得一个指定的子节点,可以调用子节点,可以调用NodeList 对象的对象的item 方方法,并给出想取得的子节点的索引值(注法,并给出想取得的子节点的索引值(注意:子节点的索引值由零开始)。意:子节点的索引值由零开始)。NodeList 对象只有一个名为对象只有一个名为length的属性,的属性,用来表示用来表示NodeList 集合中子节点的个数。集合中子节点的个数。表表7-7 NodeList 对对象常用方法象常用方法方方 法法说说 明明item依依给给出的索引出的索引值值,返回所要的,返回所要的节节点,索引点,索引值值0表示第一个表示第一个节节点点reset内部指内部指针针指向指向节节点集合中第一个点集合中第一个节节点位置之前,点位置之前,使得当下一个使得当下一个节节点被点被调调用用时时,指向第一个,指向第一个节节点点nextNode内部指内部指针针指向指向节节点集合中的下一个点集合中的下一个节节点点7.2.5 ParseError对象对象ParseError对象用来报告载入和解析对象用来报告载入和解析XML文档时产生的错误。文档时产生的错误。ParseError对象没有提供有关的方法,而对象没有提供有关的方法,而提供了多个属性来分别表示出错的代号、提供了多个属性来分别表示出错的代号、出错文档的出错文档的URL、文档中出错的位置以及、文档中出错的位置以及出错原因等信息。出错原因等信息。表表7-8列出了列出了ParseError对象的各种属性及对象的各种属性及简短说明。简短说明。表表7-8 ParseError 对对象常用属性象常用属性属属 性性说说 明明errorCode用十用十进进制数表示的出制数表示的出错错代号,若此数代号,若此数为为零,表示没有零,表示没有发发生生错误错误filepos出出错错文档的文档的绝对绝对位置位置line文档中出文档中出错错的行的行linepos文档中出文档中出错错行内的出行内的出错错位置位置reason用文字描述的出用文字描述的出错错原因原因srcText文档中出文档中出错错的源代的源代码码url出出错错文档的文档的URL7.3 DOM7.3 DOM客户端编程访问客户端编程访问XMLXML7.3.1 在客户端编程中建立在客户端编程中建立DOM在客户端利用在客户端利用DOM对象编程来访问本地对象编程来访问本地XML文档,最简单的方法就是将文档,最简单的方法就是将XML文档文档载入并绑定到某个载入并绑定到某个HTML文档,在该文档,在该HTML文档中建立一个数据源对象文档中建立一个数据源对象DSO。此后,通过由此后,通过由ID属性指定的标识符便可引属性指定的标识符便可引用这个用这个DSO。并可以进一步使用。并可以进一步使用DSO的对的对象成员象成员XMLDocument来访问来访问DOM。在在HTML网页中建立网页中建立XML DOM对象的常对象的常用方式是,首先创建一个用方式是,首先创建一个MSXML所支持所支持的的DOMDocument对象实例,然后再调用对象实例,然后再调用其其load方法载入指定的方法载入指定的XML文档,建立起文档,建立起DOM结构树与结构树与XML文档之间的关联。文档之间的关联。7.3.2 显示单记录显示单记录XML文档数据文档数据书中的书中的DomDemo_01.htm文档,就是一个文档,就是一个利用利用DOM对象编写简单脚本代码的对象编写简单脚本代码的HTML文档。在文档。在IE浏览器中运行这个网页文档,浏览器中运行这个网页文档,即可将范例文档即可将范例文档Customer_single.xml中每中每个子元素的内容显示出来,如下图所示。个子元素的内容显示出来,如下图所示。7.3.3 显示多记录显示多记录XML文档数据文档数据书中的书中的DomDemo_02.htm文档,就是一个文档,就是一个利用利用DOM对象编写脚本程序来显示对象编写脚本程序来显示Customer.xml 中所有的记录数据的中所有的记录数据的HTML文档。在该文档的脚本程序设计中利用了文档。在该文档的脚本程序设计中利用了一种与一种与XML文档中所包含元素数量无关的文档中所包含元素数量无关的方法,因而可以显示所有的记录数据。方法,因而可以显示所有的记录数据。7.3.4 查询指定的查询指定的XML元素数据元素数据书中的书中的DomDemo_03.htm文档,就是一个文档,就是一个利用利用Document对象的对象的getElementsByTagName 方法,在方法,在Customer.xml文档中查询所有符合指定名文档中查询所有符合指定名称元素的例子。将此网页文档在称元素的例子。将此网页文档在IE浏览器浏览器中打开,在文本框中输入要查询的元素名中打开,在文本框中输入要查询的元素名称称“联系人联系人”后再按下后再按下“查询查询”按钮,即按钮,即可显示出查询结果。可显示出查询结果。7.3.5 访问访问XML文档的属性值文档的属性值利用利用DOM编程的方式,同样可以实现访问编程的方式,同样可以实现访问XML文档中的属性。对于那些含有属性的文档中的属性。对于那些含有属性的XML元素只元素只能使用该元素节点的能使用该元素节点的attributes属性来访问其属性来访问其Attribute子节点。子节点。书中的书中的DomDemo_04.htm文档,就是用来显示范文档,就是用来显示范例文档例文档Customer_Att.xml中每个中每个“客户客户”元素含元素含有的所有子元素的数据,同时显示出每个有的所有子元素的数据,同时显示出每个“联系联系人人”子元素含有的两个属性(包括属性名称和属子元素含有的两个属性(包括属性名称和属性值)。性值)。7.3.6 测试测试XML文档的有效性文档的有效性书中的书中的ValidityTest.htm文档,就是一个可用来检文档,就是一个可用来检验任何验任何XML文档有效性的脚本程序范例网页文档,文档有效性的脚本程序范例网页文档,这个网页会载入一个指定的这个网页会载入一个指定的XML文档,并使用文档,并使用DOMParseError对象所提供的属性来检测和报告对象所提供的属性来检测和报告载入载入XML文档时所发生的错误。文档时所发生的错误。假设指定的假设指定的XML文档是有效的、不存在格式错误文档是有效的、不存在格式错误运行上述检测程序网页后,将弹出运行上述检测程序网页后,将弹出“载入的载入的XML文档是有效的!文档是有效的!”的消息框。如果被检测的的消息框。如果被检测的XML文档确实存在错误,就会弹出消息框,同时在其文档确实存在错误,就会弹出消息框,同时在其中详细地列出各项错误说明信息。中详细地列出各项错误说明信息。7.4 DOM7.4 DOM服务器端编程访问服务器端编程访问XMLXML7.4.1 ASP编程环境与编程环境与DOM1建立建立ASP的运行环境的运行环境ASP是一种在服务器端运行的脚本程序,是一种在服务器端运行的脚本程序,所以在开发和测试所以在开发和测试ASP网络应用程序之前,网络应用程序之前,必须建立可供必须建立可供ASP程序运行的程序运行的Web服务器服务器工作环境。工作环境。因为因为ASP是是Microsoft公司推出的,只有在公司推出的,只有在Windows操作系统及其配套的操作系统及其配套的Web服务器服务器软件软件IIS支持下才能运行。支持下才能运行。在成功安装在成功安装IIS软件之后,再做一些简单的软件之后,再做一些简单的设置,就可以将自己的机器设定成一台虚设置,就可以将自己的机器设定成一台虚拟的拟的Web服务器。服务器。2在在ASP编程中创建编程中创建XML DOM使用使用JavaScript创建创建XML DOM对象实例,应使用对象实例,应使用如下代码之一:如下代码之一:var xmldoc=Server.CreateObject(MSXML.DOMDocument);var xmldoc=Server.CreateObject(Microsoft.XMLDOM);使用使用VBScript创建创建XML DOM对象实例,应使用对象实例,应使用如下代码之一:如下代码之一:set xmldoc=Server.CreateObject(MSXML.DOMDocument)set xmldoc=Server.CreateObject(Microsoft.XMLDOM)此外,加载此外,加载XML文档时需要使用文档时需要使用ASP提供的提供的Server对象的对象的MapPath方法将相对路径映射为网方法将相对路径映射为网络路径。络路径。7.4.2 ASP编程创建编程创建XML文档文档可以利用可以利用DOM对象进行对象进行ASP编程来创建编程来创建XML文文档。具体步骤为:档。具体步骤为:1.调用调用Server对象的对象的CreateObject方法创建一个方法创建一个Document对象实例。对象实例。2.调用调用Document对象的对象的loadXML方法,将字符串方法,将字符串形式的形式的XML声明语句和文档根元素节点存入声明语句和文档根元素节点存入内存缓冲区中的内存缓冲区中的DOM树。树。3.在根元素下创建各个子元素节点。在根元素下创建各个子元素节点。4.为元素添加属性。为元素添加属性。5.当所有的元素创建完毕后,调用当所有的元素创建完毕后,调用Document对象对象实例的实例的Save方法将内存中的方法将内存中的DOM树内容存入树内容存入指定的指定的XML文档。文档。7.4.3 ASP编程遍历编程遍历XML文档文档 书中的书中的ASP程序范例程序范例DomTraverse1.asp,是,是通过遍历通过遍历DOM树的节点来访问和显示服务器端树的节点来访问和显示服务器端XML文档文档Customer.xml的所有元素数据。的所有元素数据。该范例程序首先创建一个该范例程序首先创建一个XML DOM对象实例,对象实例,然后载入指定的然后载入指定的Customer.xml文档。此后主要是文档。此后主要是通过创建一个递归函数通过创建一个递归函数traverse()来实现遍历所来实现遍历所有的有的DOM节点。函数代码中使用了当前节点的节点。函数代码中使用了当前节点的childNodes属性来获得一个属性来获得一个NodeLists集合对象,集合对象,并通过循环语句来逐个显示该集合中各个节点的并通过循环语句来逐个显示该集合中各个节点的文本内容。文本内容。7.4.4 ASP编程添加编程添加XML数据数据 利用利用DOM技术结合技术结合ASP编程可以为服务器端编程可以为服务器端的的XML文档添加新的元素,这是通过为该文档的文档添加新的元素,这是通过为该文档的 DOM树添加相应的节点来实现的。树添加相应的节点来实现的。书中的书中的DomAppend.htm文档是用来添加新客文档是用来添加新客户数据的表单网页,用户在该网页表单提供的文户数据的表单网页,用户在该网页表单提供的文本框中输入完数据后,单击本框中输入完数据后,单击“提交提交”按钮,将激按钮,将激活一个名为活一个名为DomAppend.asp的脚本程序,该程序的脚本程序,该程序负责接收在表单中输入的各项数据、创建负责接收在表单中输入的各项数据、创建XML DOM对象实例并载入指定的对象实例并载入指定的Customer.xml文档、文档、新建若干子节点、给新节点赋值等,并最终生成新建若干子节点、给新节点赋值等,并最终生成添加数据后的添加数据后的XML文档。文档。7.4.5 ASP编程修改编程修改XML数据数据 利用利用DOM与与ASP编程的方式还可以编程的方式还可以实现对实现对XML文档中的指定数据进行修改文档中的指定数据进行修改和更新。书中的范例程序和更新。书中的范例程序DomModify1.asp就是在就是在Customer.xml客客户数据文档中,将户数据文档中,将“红阳商贸红阳商贸”公司的公司的联系人更新为联系人更新为“王大海王大海”。7.4.6 ASP编程转换编程转换XML文档文档 利用利用DOM对象与对象与ASP编程还可以依照相应编程还可以依照相应XSL样式表的规定,将指定的样式表的规定,将指定的XML文档转换为标准的文档转换为标准的HTML文档并在浏览器中显示出来。具体步骤为:文档并在浏览器中显示出来。具体步骤为:为需要转换的为需要转换的XML文档设计并创建一个文档设计并创建一个XSL样样式表文件;式表文件;创建两个创建两个DOMDocument对象实例,用来分别对象实例,用来分别载入被转换的载入被转换的XML文档和创建好的文档和创建好的XSL样式表文件;样式表文件;调用调用Document对象的对象的transformNode方法,依方法,依照这个样式表将照这个样式表将XML文档转换为相应的文档转换为相应的HTML文档;文档;将转换后的将转换后的HTML文档在浏览器中显示出来。文档在浏览器中显示出来。