文档对象模型

转载 2006年06月07日 11:36:00

文档对象模型(通常称为 DOM)为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后您的代码就可以使用 DOM 接口来操作这个树结构。您可以遍历树以了解原始文档包含了什么,您可以删除树的几个部分,还可以重新排列树和添加新的分支,等等

DOM 提供了一组丰富的功能,您可以用这些功能来解释和操作 XML 文档,但使用它们是有代价的。

  • DOM 构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。
  • DOM 创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。如果您只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。
  • DOM 解析器必须在您的代码取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟。

这些仅仅是由文档对象模型的设计引起的问题;撇开这些问题,DOM API 是解析 XML 文档非常有用的方法

用于 XML 的简单 API

创建了 SAX 接口。SAX 的几个特征解决了 DOM 的问题:

  • SAX 解析器向您的代码发送事件。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,它会告诉您。您可以决定什么事件对您重要,而且可以决定要创建什么类型的数据结构以保存来自这些事件的数据。如果您没有显式地保存来自某个事件的数据,它就被丢弃。
  • SAX 解析器根本不创建任何对象,它只是将事件传递给您的应用程序。如果希望基于那些事件创建对象,这将由您来完成。
  • SAX 解析器在解析开始的时候就开始发送事件。当解析器发现文档开始、元素开始和文本等时,代码会收到一个事件。您的应用程序可以立即开始生成结果;您不必一直等到整个文档被解析完毕。更妙的是,如果您只查找文档中某些内容,代码一旦找到所要找的东西就可以抛出一个异常。该异常会停止 SAX 解析器,然后代码用它找到的数据做它需要做的任何事。

SAX 解析器也有些问题引人关注:

SAX 事件是无状态的。当 SAX 解析器在 XML 文档中发现文本时,它就向您的代码发送一个事件。该事件仅仅给您发现的文本;它不告诉您什么元素包含那个文本。如果您想知道这一点,则必须自己编写状态管理代码。 SAX 事件不是持久的。如果应用程序需要一个数据结构来对 XML 文档建模,则必须自己编写那样的代码。如果您需要从 SAX 事件访问数据,并且没有把那个数据存储在代码中,那么您不得不再次解析该文档。

JDOM 是基于 Java 技术的开放源码项目,它试图遵循 80/20 规则:用 DOM 和 SAX 20% 的功能来满足 80% 的用户需求。JDOM 使用 SAX 和 DOM 解析器,因此它是作为一组相对较小的 Java 类被实现的。

JDOM 的主要特性是它极大地减少了您必须编写的代码数量。

JDOM 应用程序的长度通常是 DOM 应用程序的三分之一,大约是 SAX 应用程序的一半。(当然,坚持使用 DOM 的纯粹主义者会建议说:从长远来看,学习和使用 DOM 终会有所回报)。JDOM 并不做所有的事,但对于大多数您要做的解析,它可能正好适合您。

尽管 DOM、SAX 和 JDOM 为大多数常见任务提供了标准接口,但仍有些事情是它们不能解决的。例如,在 Java 程序中创建 DOMParser 对象的过程因 DOM 解析器的不同而不同。为了修正这个问题,Sun 发布了 JAXP(用于 XML 解析的 Java API,Java API for XML Parsing)。该 API 为使用 DOM、SAX 和 XSLT 处理 XML 文档提供了公共接口。

JAXP 提供的诸如 DocumentBuilderFactoryDocumentBuilder 之类的接口为不同的解析器提供了一个标准接口。还有一些方法可以允许您控制底层的解析器是否可以识别名称空间以及是否使用 DTD 或模式来验证 XML 文档。

要用 Java 编写应用程序吗?JAXP 使用 DOM、SAX 和 JDOM;如果您用 Java 编写代码,那么您应使用 JAXP 将您的代码与各种解析器实现的细节隔离。 应用程序将如何部署?如果您的应用程序将要作为 Java applet 部署,那么您会希望使要下载的代码数量最小,别忘了 SAX 解析器比 DOM 解析器小。还要知道使用 JDOM 时,除了 SAX 或 DOM 解析器之外还要求编写少量的代码。 一旦解析了 XML 文档,还需要多次访问那些数据吗?如果您需要回过头来访问 XML 文件的已解析版本,DOM 可能是正确的选择。而 SAX 事件被触发时,如果您以后需要它,则由您(开发人员)自己决定以某种方式保存它。如果您需要访问不曾保存的事件,则必须再次解析该文件。而 DOM 自动保存所有的数据。 只需要 XML 源文件的少量内容吗?如果您只需要 XML 源文件的少量内容,那么 SAX 可能是正确的选择。SAX 不会为源文件中的每个东西创建对象;您要确定什么是重要的。使用 SAX,您要检查每个事件以了解它是否与您的需要有关,然后相应地处理它。更妙的是,一旦找到您正在寻找的东西,您的代码就会抛出一个异常来完全停止 SAX 解析器。 您正在一台内存很少的机器上工作吗?若是的话,不管您可能考虑到的其它因素是什么,SAX 是您的最佳选择。

JS DOM(文档对象模型)与BOM(浏览器对象模型)

在JS中,对DOM(Document Object Model)对象和BOM(Browser Object Model )对象的操作是非常重要的内容。DOM主要包括HTML文档的属性和方法,像对HTM...
  • qq_18895659
  • qq_18895659
  • 2016年06月18日 23:26
  • 824

JAvaScript和DOM(文档对象模型)和BOM(浏览器对象模型)

DOM是针对XML但经过扩展用于HTML的应用程序编程接口DOM把整个页面映射成一个多层节点结构,HTML页面中的每一个组成部分都是某种类型的节点,这些节点也包含这不同类型的数据...
  • wang2963973852
  • wang2963973852
  • 2016年10月27日 13:58
  • 1476

文档对象模型(DOM)

             文档对象模型(DOM)文档对象模型(DOM)是用于表示HTML元素以及Web浏览器信息的一个模型,它使脚本程序能够访问网页上的信息。文档对象模型(DOM)的每个对象都有属性、...
  • mxq007
  • mxq007
  • 2007年09月04日 09:11
  • 708

关于js中的顶级对象模型

只是为了更深的记住,所以自己达成
  • u014209688
  • u014209688
  • 2014年04月08日 20:28
  • 1402

在哪里可以找到office的对象模型文档?

在哪里可以找到对象模型文档?loadTOCNode(3, moreinformation);Office 应用程序的对象模型记录在 Office 两个版本的语言参考中:Microsoft Office...
  • lanman
  • lanman
  • 2007年07月24日 23:54
  • 2066

DOM(文档对象模型) 概念

DOM: Document Object Model 文档对象模型                主要用来将标记型文档(html,xml)封装成对象,并将标记型文档中的所有内容(标签、文本、属性等)都...
  • wangjian_an
  • wangjian_an
  • 2016年06月06日 12:39
  • 611

动态HTML和W3C文档对象模型

1、Web标准       1994年,Tim创立了万维网联盟(World Wide Web Consortium,W3C),该组织致力于Web技术演变的管理。它主要有三个目标: 提供通用的访问技...
  • haandxc
  • haandxc
  • 2016年04月01日 09:35
  • 394

浅谈 Excel 对象模型

不论您采用何种方式来开发Excel应用程序,了解Excel对象模型尤其重要,这些对象是您与Excel进行交互的基石。据不完全统计,Excel的对象模型中有270多个对象及超过5000多个属性和方法。通...
  • shenshen211
  • shenshen211
  • 2016年02月23日 17:14
  • 1439

Word组件对象模型

1  Word组件对象模型    Microsoft Office Word 2003 对象是按层次顺序排列的,层次结构顶端的两个主类是 Application 类和 Document 类。这两个类...
  • wishfly
  • wishfly
  • 2014年10月10日 11:25
  • 1205

JavaScript——文档对象模型

一、基本概念   文档对象模型(DOM)是表示文档和访问、操作构成文档的各种元素的应用程序接口(API)。它解决了NetScape的JavaScript和Microsoft的JavaScript之间...
  • qq_28409193
  • qq_28409193
  • 2018年01月06日 12:19
  • 14
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:文档对象模型
举报原因:
原因补充:

(最多只允许输入30个字)