DOM和SAX

  W3C制定了一套书写XML分析器的标准接口规范——DOM。

  除此以外,XML_DEV邮件列表中的成员根据应用的需求也自发地定义了一套对XML文档进行操作的接口规范——SAX。

  这两种接口规范各有侧重,互有长短,应用都比较广泛。

  应用程序开发过程中,应用程序不是直接对XML文档进行操作的,而是首先由XML分析器对XML文档进行分析。

  然后,应用程序通过XML分析器所提供的DOM接口或SAX接口对分析结果进行操作,从而间接地实现了对XML文档的访问。

DOM介绍 优缺点分析

  DOM: Document Object Model 文档对象模型。

  在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序通过对这个对象模型的操作,来实现对XML文档数据的操作。

  通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制。

  DOM树所提供的随机访问方式给应用程序的开发带来了很大的灵活性,它可以任意地控制整个XML文档中的内容。

  然而,由于DOM分析器把整个XML文档转化成DOM树放在了内存中,因此,当文档比较大或结构比较复杂时,对内存的需求就比较高。

  而且,对于结构复杂的树的遍历也是一项耗时的操作。

  所以,DOM分析器对机器性能的要求比较高,实现效率不十分理想。

  由于DOM分析器所采用的树结构的思想与XML文档的结构相吻合,同时鉴于随机访问所带来的方便,因此,DOM分析器还是有很广泛的应用价值的。

DOM的组成

  对于XML应用开发来说,DOM就是一个对象化的XML数据接口,一个与语言无关、与平台无关的标准接口规范。

  DOM定义了HTML文档和XML文档的逻辑结构,给出了一种访问和处理这两种文档的方法。

  文档代表的是数据,而DOM则代表了如何去处理这些数据。

  作为W3C的标准接口规范,目前,DOM由三部分组成,包括:核心(core)、HTML接口和XML接口。

  核心部分是结构化文档比较底层对象的集合,这一部分所定义的对象已经完全可以表达出任何HTML和XML文档中的数据了。

  HTML接口和XML接口两部分则是专为操作具体HTML文档和XML文档所提供的高级接口。

DOM树

  一个XML文档及其所对应的DOM树如下:

<?xml version="1.0" encoding="utf-8"?>

<bookstore>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book> <book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book> <book category="web">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book> <book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book> </bookstore>

  要严格区分XML文档树中的根节点与根元素节点:

  文档(根节点)和根元素节点是两回事。

  根节点代表整个文档,是我们解析XML文档的入口,通过它获取到Document对象;

  根元素节点代表XML文档的根元素,必须要在获得Document对象之后才能一层一层地去访问它的元素。

DOM模型结构

  最常见的节点类型:

  元素:元素是XML的基本构建。

  元素可以有其他元素、文本节点或两者兼有来作为其子节点。

  元素节点还是可以有属性的唯一类型的节点。

  属性:属性节点包含关于元素节点的信息,但实际上,不认为它是元素的子节点。

  文本:确切来讲,文本节点是文本。它可以包含许多信息或仅仅是空白。

  文档(根节点) :文档节点是整个文档中所有其他节点的父节点。(根节点不等于根元素节点)。

  较不常见的节点类型:CDATA、注释、处理指令。

DOM的四个基本接口

  在DOM接口规范中,有四个基本的接口:Document, Node, NodeList, NamedNodeMap。

Document

  Document接口是对文档进行操作的入口,它是从Node接口继承过来的。

Node

  Node接口是其他大多数接口的父类。

  在DOM树中,Node接口代表了树中的一个节点。

NodeList

  NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。

  它提供了对节点集合的抽象定义,并不包含如何实现这个节点集的定义。

  NodeList用于表示有顺序关系的一组节点,比如某个节点的子节点序列。

  在DOM中,NodeList的对象是live的,对文档的改变,会直接反映到相关的NodeList对象中。

NamedNodeMap

  NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点,这个接口主要用在属性节点的表示上。

  尽管NamedNodeMap所包含的节点可以通过索引来进行访问,但是这只是提供了一种枚举方法,NamedNodeMap所包含的节点集中节点是无序的。

  与NodeList相同,在DOM中,NamedNodeMap对象也是live的。

解析器基础

  XML解析器实际上就是一段代码,它读入一个XML文档并分析其结构。

  分类:

  带校验的解析器。

  不带校验的解析器。

  支持DOM的解析器(W3C的官方标准)

  支持SAX的解析器(事实上的工业标准)

参考资料

  圣思园张龙老师XML视频教程。

  w3school XML DOM 教程:

  http://www.w3school.com.cn/xmldom/index.asp

  Java API文档:

  http://docs.oracle.com/javase/7/docs/api/index.html

XML DOM解析 基础概念的更多相关文章

  1. XML与web开发-01- 在页面显示和 XML DOM 解析

    前言: 关于 xml 特点和基础知识,可以菜鸟教程进行学习:http://www.runoob.com/xml/xml-tutorial.html 本系列笔记,主要介绍 xml 在 web 开发时需要 ...

  2. python 解析XML python模块xml.dom解析xml实例代码

    分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...

  3. Java XML Dom解析工具

    Java XML Dom解析工具 缩进等 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); ...

  4. 使用JAXP对xml文档进行DOM解析基础

    XML解析方式分为两种:dom和sax         dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式.       sax: ...

  5. Java XML DOM解析(xPath)

    (一) XML概念 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等.它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的 ...

  6. Python使用xml.dom解析xml

    在菜鸟教程上找了个关于电影信息的xml类型的文档,用python内置的xml.dom来解析提取一下信息. 先复习一下xml概念: XML 指可扩展标记语言(EXtensible Markup Lang ...

  7. JavaEE XML DOM解析之DOM4J

    DOM解析之DOM4J @author ixenos DOM4J常用API 读取xml文档: Document doc = new SAXReader().read("xml文件" ...

  8. JavaEE XML DOM解析

    DOM解析XML @author ixenos XML解析方式(原理) a)     DOM 解析树 b)     SAX  流事件 DOM解析对应主流工具 i.          DOM(官方) i ...

  9. XML(DOM解析)

    //创建book.xml 文件 <?xml version="1.0" encoding="UTF-8"?> <books> <b ...

随机推荐

  1. Spoken English Practice( Nobody have the guts to tell Paul what a mistake he was taking.(call,come,gut,fortune,when it comes to))

    音标复习 绿色:连读:                  红色:略读:               蓝色:浊化:               橙色:弱读 口语蜕变(2017/6/24) If your ...

  2. Phonetic Symbols&Rules of Pronunciation

    音标 Phonetic Symbols http://yinbiao.tingclass.net/ 1.1元音 1.1.元音:元音有20个,其中单元音12个,双元音8个. (1)“短”单元音 [i] ...

  3. Spring 框架整合JUnit单元测试

    // 整合之前 public class Demo{ @Test public void fun(){ // 获取工厂,加载配置文件 ApplicationContext ac = new Class ...

  4. Scrapy框架-scrapy框架架构详解

    1.Scrapy框架介绍 写一个爬虫,需要做很多的事情.比如:发送网络请求.数据解析.数据存储.反反爬虫机制(更换ip代理.设置请求头等).异步请求等.这些工作如果每次都要自己从零开始写的话,比较浪费 ...

  5. Python高级教程-Map/Reduce

    Python中的map()和reduce() Python内建了map()和reduce()函数. map() map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每 ...

  6. zookeeper3.4.5集群安装

    机器配置: 机器 Hostname user 192.168.169.139 node139 hadoop 192.168.169.140 node140 hadoop 192.168.169.141 ...

  7. Config Static IP Address manually in Ubuntu

    The process of the configuration of static IP address in Ubuntu is as follows: ``` $ sudo vim /etc/n ...

  8. 设置SVN提交日志必填

    1.打开visualSVN Server2.打开Repositories3.右键需要控制的项目->所有任务->manage hooks...4.选择Hooks tab,点击Pre-comm ...

  9. 第五课 Makefile文件的制作(补充)

    序言: 前面的几节课讲解Makefile的一些基本知识也做了一些小例子实践了几下,那么到现在普通的练习则是没有问题.但是如果做项目文件较多又分层次等等还是会碰上好多问题的,这节课补充一些知识. 知识点 ...

  10. C#:DateTime格式增减时间

    DateTime time = DateTime.Now(); DateTime XMinutesrLater = time.AddMinutes(X); // X分钟以后的时间,即在当前时间基础上增 ...