博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于DOM
阅读量:6347 次
发布时间:2019-06-22

本文共 1833 字,大约阅读时间需要 6 分钟。

  hot3.png

SAX只是在Java中处理XML的几个API中的一个。接下来我们要介绍的是文档对象模型Document Object Model,DOM)。这个API不同于SAX,它在很多方面对SAX是一种补充。因为DOM完全不同于SAX,所以我们要花一些时间来讨论DOM的背景知识,以及为什么在有些程序中要用它来代替SAX。选择处理XML的API需要权衡再三,当然在DOM和SAX之间也需要进行选择。

文档对象模型(Document Object Model)

与SAX不同,DOM源于万维网联盟(W3C,网址http://www.w3.org)。SAX是一种公有领域的软件,而DOM类似XML,它也是一个标准。DOM的宗旨是跨越所有编程语言和工具来表示文档的内容和模型。在DOM标准中,现在提供了对JavaScript,Java,CORBA,以及其他语言的支持,这使得DOM成了跨平台和跨语言的标准。

DOM的级别(Levels)和模块(Modules)

DOM还用“Level”(级别)的组织形式代替了版本的组织形式。DOM Level 1是一个已经被接受的推荐标准,读者可以打开  ,浏览完整的规范内容。DOM Level 2确定于2000年11月,它对DOM Level 1中的核心功能进行了扩充,并对如XML,HTML,CSS等具体内容模块增加了一些额外的模块和选项。这些不通用的模块填补了DOM Level 1中通用工具所留下来的空白。你可以打开网址   ,去浏览通用的DOM Level 2推荐标准。最新增加到DOM中的DOM Level 3,是一个基于DOM Level 2核心的推荐标准,可以通过 了解相关信息,其中主要是在DOM中增加了有关XML InfoSet(XML信息集)的相关内容。虽然DOM Level 3标准已经被确定了,但是目前解析器对其的支持还不够,因此从普通的Java和XML开发人员的角度出发,我们主要还是使用DOM Level 2核心

DOM的概念

除了DOM标准的基础知道之外,我们还要说一说编程结构本身的一些知识。DOM的核心是一个树模型。SAX采取的是将XML文档逐步的呈现在你眼前的方式,并在解析过程中报告所有发生的事件。DOM在很多方面都与它不同,DOM提供的是文档完整的内存表示,在内存中,文档是以树的形式存在的。所有这一切都是建立在DOM的org.w3c.dom.Node接口上。通过这个接口派生,DOM提供了许多XML专有的接口,如Element,Document,Attr和Text。DOM从各个方面都遵循树模型。

令人失望的SAX

很多时候使用DOM,不是一种选择而是一种需要。那时,你最好尽快弄明白情况,而不是浪费时间去决定使用哪种API,遇到下列情况时基本上必须要使用DOM

  • 需要随机的访问文档:在SAX中,我们只能获取XML文档中正在解析的信息,同时会损失解析过程的信息。如,当文档中的第二个元素出现时,就无法访问第四个元素的信息,因为第四个元素还没有被解析,而当解析到第四个元素时,又无法“追忆”第二个元素的信息了。

  • 需要访问元素的兄弟节点:SAX解析模型中元素间的横向移动是很困难的。SAX中提供的访问方式主要是层次型和串行的。我们可以访问第一个元素中的子节点,然后向上回溯,再向下到达第二个元素的叶子节点,依次类推。任何时候都没有清楚的标志能表明所在的是哪一层。SAX中没有兄弟节点的概念,也就是没有同一层中下一个元素,以及元素中嵌套元素的概念。

这并不是在控诉SAX,然而,它们确实会影响您在具体应用中所使用的API。虽然上述这些问题是SAX中典型的不是,但SAX的优势是对某个必须由XSL样式表来设定样式的HTML文档来说,在不需要随机访问文档的情况下,可以从10000个在线目录中来提取数据。同DOM相比,SAX分析器对XML文档的处理缺少灵活性,但对于只访问XML文档中的数据而不改变应用程序来说,SAX分析器的效率会很高。SAX对内存要求也比较低对于特别大的XML文档,使用SAX解析最合适(速度比DOM快,对大文件处理最适合,内存占用小,但SAX与dom4j比较呢?哪个更快,是不是不能一起比较?SAX是解析器,而dom4j是封装SAX或dom解析器的工具???据说DOM4J性能比DOM,JDOM都好

转载于:https://my.oschina.net/fhd/blog/368732

你可能感兴趣的文章
View和Activity的生命周期
查看>>
解决PHP下载大文件失败,并限制下载速度
查看>>
java B2B2C Springcloud电子商城系统—Feign实例
查看>>
java B2B2C Springcloud多租户电子商城系统 (五)springboot整合 beatlsql
查看>>
Throwable是一个怎样的类?
查看>>
Python基础(一)
查看>>
三条代码 搞定 python 生成验证码
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
无线和有线路由哪种性能更好
查看>>
Dwr3.0纯注解(纯Java Code配置)配置与应用浅析三之后端反向调用前端
查看>>
Ubuntu下安装遨游浏览器
查看>>
自定义Linux service脚本
查看>>
微信开发之发红包
查看>>
一键lnmp脚本&&php扩展模块安装(适用于CENTOS6.X系列)
查看>>
二维观察---文字的裁剪
查看>>
矩形覆盖
查看>>
ICMP
查看>>
界面设计模式(第2版)(全彩)
查看>>
解决VMware Workstation错误:未能锁定文件
查看>>