您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > XMLDOM编程模型简单参考手册
XMLDOM编程模型简单参考手册文档对象模型(DocumentObjectModel,DOM)是应用在Web浏览器中的一项技术。浏览器的窗口、文档和历史等对象都被认为是对象模型的一部分。然而,各种浏览器访问和操作这些对象的方式都是不相同的。为了创建更加标准化的方法,W3C提出了目前的W3CDOM规范。W3CDOM是一种独立于语言和平台的定义,它定义了构成DOM的不同对象,但是却没有提供具体的实现方法。实际上,它能够用任何编程语言实现。利用DOM中的对象,开发人员可以对文档进行读取、搜索、修改、添加和删除等操作。DOM为文档导航以及操作HTML和XML文档的内容和结构提供了标准函数。本章中,将重点介绍文档对象模型,使用这种技术可以通过程序操作XML文档。本章重点:●文档对象模型的定义●XML解析器概述●DOM解析器的模型结构与使用8.1文档对象模型概述文档对象模型定义了文档的逻辑结构和访问、操纵文档的方法,它为XML、HTML提供了应用程序接口API。DOM中的对象允许开发者从文档中读取、搜索、修改、增加和删除数据,它们为文档导航提供了标准的功能定义,并且操纵XML文档的内容和结构。DOM提供的对象和方法可以和任何编程语言(Java、C++、.NET)一起使用,也可以与VBScript、JavaScript等脚本语言一起使用。要想访问XML文件,DOM可以算作是可选的访问方法之一。与其他用于产生XML文档的机制(例如,直接向一个流写入)相比,使用DOM有以下几点优越性。1.DOM能够保证正确的语法和格式正规性由于DOM将文本文件转化为以抽象的节点树表示,因此能够完全避免无结束标记和不正确的标记嵌套等问题。使用DOM操作XML文档时,开发人员不必担心文档的文本表示而只需要关注父子关系和相关的信息。另外,DOM能够避免文档中不正确的父子关系。2.DOM能够从语法中提取内容由DOM创建的节点树是XML文件内容的逻辑表示,它显示了文件提供的信息,以及它们之间的关系,而不受限于XML语法。3.DOM能够简化内部文档操作就修改XML文件的结构而言,使用DOM比使用传统的文件操作机制更加简单,利用DOM在文档中增加元素非常简便。另外,我们可以通过几条命令执行全局性操作(例如,从文档中删除具有特定标记名称的所有元素),而不必采用繁琐的方法--首先对文件进行扫描,然后删除相关的标记。4.DOM能够贴切地反映典型的层次数据库和关系数据库的结构DOM表示数据元素关系的方式非常类似于现代层次型和关系型数据库表示信息的方法。这使得利用DOM在数据库和XML文件之间移动信息变得相当简单。8.2XML解析器第1章中,我们提到,解析器的主要功能就是检查XML文件是否有结构上的错误,剥离XML文件中的标记,读出正确的内容,以交给下一步的应用程序处理。这里,我们详细介绍一下目前主要应用的四种XML解析器,对它们的原理及性能的比较如下。1.DOMDOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构时通常需要加载整个文档和构造层次结构,然后才能做其他工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有以下几个优点。首先,因为树在内存中是持久的,所以可以修改DOM树以便应用程序能对数据和结构做出更改。另外,它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM的劣势是基于大文件的加载速度很慢,因为它需要全部加载后才能操作。因此对于特别大的文档,使用其他手段,比如基于事件的模型SAX来处理会更好。2.SAXSAX是基于事件驱动的。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,就将发送事件,开发者可以通过编写响应这些事件的代码来保存数据。这种处理的机制非常类似于流媒体的处理方式。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档,它可以在某个条件得到满足时停止解析。3.JDOM为减少DOM和SAX的编码量,出现了JDOM接口。JDOM的目的是成为Java特定文档模型,它简化了与XML的交互并且比使用DOM的速度更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。JDOM与DOM主要有两方面不同。首先JDOM仅使用具体类而不使用接口。这在某些方面简化了API(ApplicationPiogrammingInterface),但是也限制了灵活性。第二,其API中大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的工作。JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的广泛检查以防止用户做任何在XML中无意义的事。但是JDOM自身不包含解析器,它通常使用SAX2解析器来解析和验证输入XML文档。4.DOM4JDOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XMLSchema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,同时它通过DOM4JAPI和标准DOM接口具有并行访问功能。为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法,可以提供更直接的编码方法,并提供更好的性能。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。DOM4J是一个非常优秀的JavaXMLAPI,具有性能优异、功能强大和易用的特点,同时它也是一个开放源代码的软件。如今我们可以看到越来越多的Java软件都在使用DOM4J来读写XML。总之,DOM是与平台有关、与语言无关的由W3C制定的官方标准。基于树的层次,其优点是可以移植,编程容易,开发人员只需要调用建树的指令。其缺点是加载大文件不理想。SAX是基于事件模型的,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag时,它可以激活一个回调方法,告诉该方法制订的标签已经找到。类似与流媒体的解析方式,所以在加载大文件时效果不错。JDOM是想成为Java特定文档模型。它简化了与XML的交互并且比使用DOM的速度更快。使用的是具体类不使用接口,运用了大量的Collections类,方便程序员操作。DOM4J是一个独立的开发结果是一个非常非常优秀的JavaXMLAPI,具有性能优异、功能强大和极端易用的特点,同时它也是一个开放源代码的软件。8.3DOM解析树为了使用XMLDOM的功能,我们需要一个DOM解析器。这个解析器读入XML文档,并剖析确定该文档的正确性,然后,把文档内容在内存中表示成一个逻辑树型结构,这个树型结构是由节点组成的,最常见的节点类型如下。●元素:元素是XML的基本构件。元素可以有其他元素、文本节点或两者兼有来作为其子节点。元素节点还是可以有属性的唯一类型的节点。●属性:属性节点包含关于元素节点的信息,但实际上,不认为它是元素的子节点。●文本:文本节点是文本。它可以包含许多信息,也可以一个是空白节点。●文档(根节点):文档节点是整个文档中所有其他节点的父节点。较不常见的节点类型有CDATA、注释和处理指令。我们可以使用DOM解析器提供的DOM对象来操纵这些节点。MSXML(MicrosoftXMLParser)就是一种DOM解析器。例如,对于拥有以下内容的XML文档:1.?xmlversion=1.0encoding=gb2312?2.books3.book4.author曹雪芹/author5.title红楼梦/title6./book7.book8.author孙更新/author9.titleXML实用大全/title10./book11./booksDOM解析器将此XML文档读进来后,会生成一棵结构树,如图8-1所示。在XML文档结构中,如图8-1中的每个圆圈表示一个节点,称为XmlNode对象。XmlNode对象是DOM树中的基本对象。XmlDocument类(它扩展XmlNode)支持用于对整个文档执行操作(例如,将文档加载到内存中或将XML保存到文件)的方法。此外,XmlDocument提供了查看和操作整个XML文档中节点的方法。XmlNode和XmlDocument都具有优良的性能和很强的可用性,并具有进行下列操作的方法和属性。●访问和修改特定于DOM的节点,如元素节点、实体引用节点等。●除检索节点包含的信息(如元素节点中的文本)外,还检索全部节点。MicrosoftXMLParser(MSXML)解析器的DOM功能提供基本的以及扩展的编程接口。基本的接口(DOMDocument和IXMLDOMNode)可以载入和创建一个文档,另外,我们也可以通过扩展的编程接口进行诸如跟踪在处理XML文档时产生的错误这样的附加操作。当MSXML解析器载入文档时,解析器读入这个文档并且创建一个描述XML文档组成部分的DOM树型结构。解析器所创建的树型结构可以被各种不同的应用程序使用,用来访问和操纵XML文档。如图8-2所示,显示了MSXML解析XML文档的过程。图8-3表示了DOM的工作路线。通过图8-3的DOM工作路线图可以看出,XML文档首先通过XML解析器将文档解析为一棵树,并创建Document对象来表示,该树由节点组成,这些节点可以是元素、文本、属性或者其他类型,这些节点都是从属于某个命名空间的,可以通过DOMAPI中的类调用不同的方法进行操作。8.4DOM模型结构前面我们介绍过,XMLDOM提供了一个标准的方法来操作存储在XML文档中的信息,这就是DOM应用编程接口(API)函数。它是应用程序和XML文档之间的桥梁。DOM包含两个关键的抽象概念:一个是树状的层次结构,另一个是用来表示文档内容和结构的节点集合。树状层次包括了所有节点,节点本身也可以包含其他的节点。这样的好处是可以通过这个层次结构来找到并修改某一特定节点的信息。使用XMLDOM,可以让我们遍历、读取和操纵XML文档的结构和内容,其主要对象和方法如下。●DOMDocument对象:描述全部文档映射表,它包括文档的所有信息。对开发人员来说,最重要的编程对象是DOMDocument。DOMDocument对象通过暴露的属性和方法来允许浏览、查询和修改XML文档的内容和结构●IXMLDOMNode对象:描述文档里的节点,此节点可以是元素、属性、处理指令、文本或其他存储在XML文档里的信息。●IXMLDOMNodeList对象:描述节点对象的集合,可以使用该对象遍历这个集合,可以用数值访问该集合。●IXMLDOMParseError对象:用来验证XML文档对于DTD、XSD的正确性。下面分别对它们进行详细介绍。8.4.1DOMDocument对象DOMDocument对象表示DOM树的最顶层节点,它实现了使用XML文档所需的所有方法,DOMDocument对象的方法主要有(注意:本章中所有示例中的代码都是JavaScript代码,有关这些代码的使用,请读者参看相关的书籍)如下这些。●createElement(elementName):该方法以元素名为参数创建一个用此参数命名的元素节点(不能创建名称空间受限制的元素。如果
本文标题:XMLDOM编程模型简单参考手册
链接地址:https://www.777doc.com/doc-2857419 .html