XML技术应用(第二版)课件CHAP5(XML)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XML技术应用(第二版)
第5章 文档对象模型
本章结构
DOM概述 DOM API 利用DOM API处理结构化文档 DOM的简单应用
5.1 DOM概述
文档对象模型一词在Web浏览器领域并不陌生。窗口 、文档和历史等对象都被认为是浏览器对象模型的一 部分。然而,有Web开发经验的人都知道各种浏览器 实现这些对象的方式不尽相同。对于如何通过Web访 问和操作文档结构这个问题,为了创建更加标准化的 方法,W3C提出了目前的W3C DOM规范。
处理节点
创建节点
创建节点可以使用Node接口提供的cloneNode()方 法,也可采用Document接口提供的多种创建方法 。
5.4 DOM 的简单应用
前 面 介 绍 了 DOM API , 为 了 编 写 通 过 DOM 访 问 XML文件的应用程序,必须使用特定的DOM实现。 本小节将以DOM的Java实现为例 ,介绍如何利用 Java编写的应用程序来读取并且处理XML文档,包 括之前提到的遍历XML文档以及添加、删除、替换 XML文档节点等。
DOM的结构
DOM文档是由树状结构表示的。树的每一个点都被 称为节点。事实上,DOM文档就是一颗节点树,在 DOM文档的逻辑结构中显示了各个节点以及各个节 点之间的相互关系(父子关系以及兄弟关系)。这一 点对于无法显示各个元素之间特性的HTML文档而言 尤其重要。
DOM的结构
事实上,可以把DOM文档树结构看作是各个子树的 集合。
5.3 利用DOM API处理结构化文档
遍历XML文档 处理节点
遍历XML文档
遍历XML文档是DOM实现 中非常常见的一种方式。通 过 遍 历XML文 档 可 以 获 取 相应的节点,以便对节点进 行处理。当然获取节点的方 式不仅仅是遍历文档,但是 作为一种获取文档内容的最 基础的方式,必须进行说明 。
11.Text接口 12.CDATASection接口 13.EntityReference接口 14.Entity接口 15.ProcessingInstruction接口 16.Comment接口 17.Document接口 18.DocumentType接口 19.DocumentFragment接口 20.Notation接口
void processNode(Node n){ Node c; startProcessing(n); for(c=n.firstChild();c!=null;c=c .nextSibiling()){ processNode(c); } finishProcessing(n);
} void startProcessing(Node n){ } void finishProcessing(Node n){ }
API实际上是一组类库,一个组件利用它指示另一个 组 件 执 行 更 底 层 的 服 务 。 W3C DOM 仅 仅 提 供 了 DOM类库的接口定义,而没有提供特定的实现,提 供DOM实现的任务要由第三方完成。当用户准备使 用DOM操作应用程序中的XML结构时,对于应用程 序的每个目标平台,都要获取相应平台的DOM实现 。大多数情况下,这些类库要与应用程序绑定,并与 应用程序的二进制代码一起分发。
处理节点
替换节点
替 换 节 点 使 用 replaceChild() 方 法 。 如 果新节点是一个 DocumentFragment 对 象 ,那么该节点下的所有 子节点按照原有的顺序 跟随新节点一起替换目 标节点;如果不是,那 么仅替换该节点本身。 如果要替换的节点已经 在文档中存在,那么首 先删除该节点,然后用 该节点替换目标节点。
正确理解DOM
DOM不是一种二进制的规范。用同一种语言编写的DOM程序 在跨平台的时候是源码兼容的,但DOM没有定义任何形式的二 进制互操作功能。
DOM并没有描述如何把对象保存到XML或者HTML中。它没 有说明对象如何表示成XML,而是说明了XML或HTML文档 如何被表示成对象。所以,DOM可用于面向对象的编程。
DOM不是一套数据结构集,它是说明接口的一个对象模型。虽 然文档包含显示父子关系的图表,但这些逻辑联系是由程序接 口定义的,而不是由任何特定内部数据表示结构的。
DOM没有定义文档中信息的相关性以及文档中信息是如何组织 的。对于XML,则由W3C的XML信息集进行说明,DOM只是 针对信息集的简单API。
节点不仅仅局限于元素,文档的其他内容包括注释、 元素的属性、文本内容、XML的实体等都可以表示 为一个节点。
DOM的工作方式
DOM的工作方式是:首先 将XML文 档 一 次 性 装 入 内 存,然后对文档进行解析, 根据文档中定义的元素、属 性、注释、处理指令等不同 的内容进行分解,以节点树 的 形 式 在 内 存 中 创 建XML 文件的表示,也就是一个文 档对象模型。这里的含义其 实是把文档对象化,文档中 每个节点对应着模型中一个 对象。然后根据对象提供的 编程接口,在应用程序中访 问 XML 文 档 进 而 操 作 XML 文档。
DOM的规范
DOM Level 1规范是在1998年10月被采纳为W3C推荐 标准的。Level 1包括对XML 1.0和HTML的支持,每 个元素被表示为一个接口。它包括用于添加、编辑、 移动和读取节点中包含的信息的方法等等。然而,它 没有包括对XML命名空间的支持,XML命名空间提 供分割文档中的信息的能力。Level 2在Level 1的基 础上,为节点添加了更多的属性和方法。Level 2添加 了命名空间支持,还允许开发人员检测和使用可能适 用于某个节点的命名空间信息。Level 2也增加了几个 新的模块,以支持级联样式表、事件和增强的树操作 。Level 3对既有的API进行扩展,提供了更好的错误 处理以及特性检测能力。Level 3包括对创建文档对象 的更好支持,增强的名称空间支持,以及用来处理文 档加载和保存、验证以及XPath的新模块。
}
处理节点
添加节点
利 用 Node 接 口 的
appendChild()

insertChild() 方 法 来 添 加 节
点,两者的不同之处在于
插入节点的位置。
处理节点
删除节点
删除节点可以采用 removeChild() 方 法 。 这 里的删除实际上是从文 档中移走节点,而不是 真正的从内存中删除( Delete)。当删除一个节 点的时候,该节点的所 有子节点树也被删除。
首先介绍Java的XML解析器。
Java XML解析器
在5.1节的DOM工作方式中,已经知道了XML解析器的存在。对于 Java平台而言,XML解析器是一个Java程序,它可以把XML文档转化 为Java对象模型。一旦解析了XML文档,就会在Java虚拟机的内存中 形成一系列文档对象模型,表示为文档节点树。当需要访问和修改存 储在XML文档中的信息时,不需要直接操作XML文件,而是通过内存 中的某些对象来访问和修改信息。XML解析器创建了一个Java文档对 象模型来表示XML文档。
5.2 DOM API
之前已经讨论过DOM是如何结构化的,它将XML文 档转化为可以通过程序访问的节点树。同时也说明了 DOM规范仅仅描述了访问机制,而不涉及特定的实 现。那么,如何利用这些信息并将它们应用于特定问 题之中呢?为此,就需要使用DOM API。
什么是DOM API
编写通过DOM访问XML文件的应用程序时,必须使 用特定的DOM实现。实现是某种形式的类库,它设 计为运行在特定的硬件和软件平台上,并访问特定的 数据存储(例如:文本文件,关系数据库等)。
处理节点
读取节点
读取节点就是通过Node 接口的方法和属性获得 对文档节点的对象引用 。当然某些节点的对象 引用可以通过这些节点 对应的接口的属性获得 。下面以之前的 Teams.xml文档为例进行 说明。
for(long i=0;i<countrys.length;i++){
Node country=countrys.item(i);
Java语言开发工具包(Java Development Kit,JDK)中提供了专门的 XML解析器,也可以使用其他公司提供的XML解析器。
遍历文档
if (element.hasChildNodes()) {
for (k = 0; k < r; k++) {
if(children.item(k).getNodeType()== org.w3c.dom.Node.ELEMENT_NODE) {
当解析器创建XML文档的对象模型时,它也会执行某些简单的文本处 理。它扩展了在文本中使用的所有实体,并且会把XML文档中信息的 结构和DTD进行比较(如果XML文档使用了DTD)。一旦这些简单的 处理获得成功,解析器就会为XML文档创建文档对象模型。为了访问 和修改文档对象中的信息,需要创建一个参考对象,才能调用文档对 象中的某些方法。
由W3C发布的文档对象模型规范是结构化文档处理 技术的一个巨大革命,这个规范为处理存储在XML 文档、HTML文档以及其他结构化信息文档中的信息 提供了一组标准的编程接口。利用DOM应用程序接 口(DOM API),应用程序开发人员就可以通过编 写特定的代码以实现特定的功能。
什么是DOM
简单地说,DOM是一组独立于语言和平台的应用程 序编程接口,它能够描述如何访问和操纵存储在结构 化XML和HTML文档中的信息。它定义了构成DOM 的不同对象,却没有提供特定的实现。实际上,它能 够用任何编程语言实现。
DocumentType 表示文档类型声明
DocumentFrag 表示一个文档片段,可以视作一个小型的Document节
ment

Notation
表示文档的一个符号
每种节点类型所允许的子节点类型
节点类型
子节点类型
Element
Text、Comment、ProcessingIstruction、CDATASection、
DOM接口继承树
DOM把文档表示成一个层次结构的节点模型,这里 的节点模型也实现了其他一些接口。某些类型的节点 可以拥有不同类型的子节点,其他都是叶节点。在文 档结构中,叶节点下面不能再有子节点。
DOM接口继承树
节点类型及其说明
节点类型 Element Attr Text CDATASetion
ment
EntityReference
Notation

DOM API核心接口
1.Node接口 2.NodeList接口 3.NamedNodeMap接口 4.CharacterData接口 5.DOMParser接口 6.DOMException接口 7.Event接口 8.DOMImplementation接口 9.Element接口 10.Attr接口
EntityReference
ProcessingInstru 无
ction
Comment

Document
Element(最多有一个)、ProcessingInstruction、
Comment、DocumentType
DocumentType 无
DocumentFrag Text、Comment、ProcessingIstruction、CDATASection、
EntityReference
Attr
Text、EntityReference
Text

CDATASetion 无
EntityReference Text、Comment、ProcessingIstruction、CDATASection、
EntityReference
Entity
Text、Comment、ProcessingIstruction、CDATASection、
含义 表示一个已经标记的பைடு நூலகம்素 表示元素的属性 表示元素的文本内容 表示文档中的CDATA区段
EntityReferenc 表示文档的实体引用
e
Entity
表示文档的实体
ProcessingInstr 表示一个文档正在处理的特殊指令或者进程
uction
Comment
表示文档的注释
Document
表示一个文档的根节点
相关文档
最新文档