XML简明教程——文档对象模型——DOM和SAX(二)

DOM概述:

DOM是一种典型的基于XML文档树状结构的解析技术。从概念上看,DOM的解析方式非常容易理解。DOM首先加载XML文档,并把XML树状结构存放到计算机内存中做进一步处理。

1.DOM与XML基于树状结构的解析模式

1.1XML基于树状结构的解析模式

XML文档中的文档类型描述、元素、属性、处理指令、注释和文本内容都可以视为状态树的节点。虽然从XML文档本身和XPath的角度来看,节点的含义略有不同,但是,一个XML文档能够被看作是按照一定层次结构分布的节点树。

当一个XML文档被以文档的形式加载到计算机内存以后,应用程序就能够像访问其他数据对象一样访问这个XML文档,并能够方便地对文档做出处理。DOM(Document Object Model)就是这样一种解析技术的典型代表。

由此可以看出,DOM对XML的处理方式与SAX处理方式完全不同。当SAX解析器处理XML文档时,xml文档中的节点逐一被读取和分析的。而在DOM解析器中,整个XML文档呗解析器加载,如果被加载的XML文档含有语法错误,DOM解析器在加载阶段都就能够发现并报告错误。因此DOM解析器不需要像SAX解析过程那样记录处理状态,解析过程没有SAX复杂。(事实上,大多数解析器在创建DOM树的过程都是采用SAX完成的)

DOM相对于SAX在XML文档内容处理上有比较大的优势。由于XML文档已经按照树状结构存储,对于应用程序来说,整个XML文档总是处于可以随时访问的状态。另外在应用程序中动态修改文档也十分容易。

DOM相对于SAX也有明显的不足。同样是由于XML文档被完整得存放到计算机内存中,计数机需要消耗数倍于原始XML文档的内存才能够在DOM解析以后处理内存中的树状结构。当处理大型XML文档时,DOM会因为内存容量消耗过大的原因而使程序效率大受影响。因此,采用DOM方式对应用程序的可伸缩性不利。它通常被用于解析和处理数据量比较少的XML文档。

1.2 Java DOM编程接口

DOM是由一组抽象化的接口组成。DOM接口定义了DOM编程规范。不同的DOM解析器通过不同的方法实现了这些接口。Node是整个Dom中最基本的数据类型,它代表了一个抽象的节点。XML文档的DOM树上的具体节点类型都是由Node类型派生而来。JAXP中的DOM接口可以由下图中的类图来表示

1. 如上所述,Node代表了DOM树中的一个抽象节点。它并没有一个确定的节点类型。DOM树中的一个具体节点都是有Node类型派生而来。每一种由Node派生的节点,可以通过测试它的对象类型得到节点类型,也可以由Node的getNodeType()方法获得。每一个节点还可以通过getNodeName()和getNodeValue()活得节点名和节点值。下表总结了Node接口的子接口的节点名、节点值和节点类型值的基本规律

2. Document

Document 节点代表了整个XML文档。当DOM解析一个XML文档以后,由XML形成的DOM节点树就是一Document对象的形式展现给应用程序的。由于XML文档的元素、处理指令、注释等都处于一个XML文档范围之内,Document中包含了用于创建元素、属性、注释、处理指令等其他节点类型的方法。

Node的normalize()方法提供了XML文档正规化的一种途径。当一个Document对象经过normalize()操作以后,相邻的文本(Text)节点被合并,空文本节点都将被去除。XML文档中的文本将通过元素、处理指令、注释和CDATA等加以分隔。

3. Element和Attr

一个Attr对象代表了元素的一个属性。DOM并不认为属性节点是整个文档树的一部分,因此从DOM的角度看,元素节点的父节点、同胞节点等都是null。属性节点能够通过getOwenerElement()方法得到当前属性所依附的元素。

一个Element对象代表了DOM树中的一个元素节点。除了在Node中定义的常规方法以外,Element还定义了一组方法用于获取元素中的属性、动态地增加一个属性或者动态删除一个属性等方法。

4.Entity 和 EntityReference

Entity代表了一个实体(而非实体描述)。DOM2中的实体节点有以下特点:不能修改实体(实体节点以及后代节点都是只读的)、实体节点没有父节点、不能解析名称控件前缀。

EntityReference代表了一个实体引用。与实体节点一样,实体引用节点以及后台节点也是只读的。EntityReference除了从Node继承下来的方法以外没有定义自己独有的方法。与实体不同的是,实体节点能够通过getPublicId()和getSystemId()过去公共和系统标识符,而实体引用节点没有这个能力。

5. Text 和 CDATSection

Text节点用于代表XML文档中元素和属性中的文本内容。

CDATSection用于代表XML文档中的CDATA部分的内容。DOM解析器只能识别CDATA的结尾标记"]]>",并以此作为CDATA的分节符。相邻的CDATASection节点不会被Node中的normalize()方法合并。

XML简明教程——文档对象模型——DOM和SAX(二)

时间: 2024-10-12 16:35:58

XML简明教程——文档对象模型——DOM和SAX(二)的相关文章

XML简明教程——文档对象模型——DOM和SAX(一)

概述 SAX是基于事件解析XML文档的代表性技术.SAX通过扫描XML文档的内容,对元素,属性和文本数据内容等逐一分析和处理. 1.XML基于时间的解析模式 基于事件的解析是指XML处理程序线性描述一个XML文档,当XML处理出鞥许从文档的开头至结尾读取XML文档的过程中,逐一分析和处理遇到的元素.属性和字符数据等. [例子1]奥运金牌榜XML文件: <?xml version = "1.0" encoding = "UTF-8"?> <?xml-

详解android解析Xml的三种方式——DOM、SAX以及XMLpull

今天学习了android解析Xml的三种方式——DOM.SAX以及XMLpull,这里对它们进行总结. 如果理解有误,欢迎指正   ^_* 一.DOM方式解析: xml是先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据.这个写起来很简单,但是很消耗内存.要是数据过大,手机不够牛逼,可能手机直接死机. 常用的DoM接口和类: Document:该接口定义分析并创建DOM文档的一系列方法,它是文档树的根,是操作DOM的基础.Element:该接口继承Node接口,提供了获

文档对象模型-DOM

DOM定义 个人关于文档对象模型的理解是我们日常开发的页面的各个基本结构,如HTML,Head,Body,..但是小红书上的解释是针对XML但经过扩展用于HTML的应用程序编程接口(API,Application Programming Interface).DOM可以把页面映射为一个多层节点结构,把HTML或XML页面中的每个组成部分都当成是某种类型的节点,这些节点又包含着不同类型的数据,而通过DOM创建的这个表示文档的树形图,开发人员就能够主动的控制页面内容和结构. DOM级别 DOM1级:

文档对象模型-DOM(一)

首先看一下DOM树结构: 每个节点都是一个对象,拥有方法和属性. 脚本可以访问以及更新DOM树(不是源代码). 针对DOM树的修改都会反映到浏览器. 访问并更新DOM树需要两个步骤:   一.定位到与需要操作的元素所对应的节点 访问元素的相关方法和属性 1.选择单个元素节点方法 (1) getElementById() //使用元素的id属性(在页面中应是唯一) (2) querySelector() //使用css选择器,返回第一个匹配的元素 (3) 通过使用在DOM树中从第一个元素遍历到另一

文档对象模型——DOM

DOM:文档对象模型,核心对象document,对html元素的样式(颜色.属性.位置).内容.属性进行动态的改变和操作 一.document对象 1.属性 title   返回或设置当前文档的标题   //document.title="标题名" URL   返回当前文档的url            //只能获取不能设置 bgColor  设置文档的背景色 fgColor   设置文档的前景色(设置文字颜色) 2.方法(获取元素的方法) document.getElementByI

文档对象模型-DOM(二)

从NodeList中选择元素 方法一:item()方法,用于返回其中的单一节点,需要在方法的参数中指定所需元素的索引编号. 当其中没有任何元素时,执行代码是对资源的浪费.因此程序员会在执行代码之前,先检查一下在NodeList中是否至少包含一个节点. 可以使用length方法来实现.举例如下: 1 var elements = document.getElementsByClassName('hot'); 2 if(elements.length>=0){ 3 var firstItem = e

DOM 文档对象模型+倒计时

DOM 文档对象模型 DOM (document object model) 文档对象模型,它定义了操作文档对象的接口. DOM 把一份html文档表示为一棵家谱树,使用parent(父), child(子), sibling(兄弟)等记号来表明家庭成员之间的关系. 通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML. JavaScript 能够改变页面中的所有 HTML 元素 JavaScript 能够改变页面中的所有 HTML 属性 JavaScript 能够

java xml解析方式(DOM、SAX、JDOM、DOM4J)

XML值可扩展标记语言,是用来传输和存储数据的. XMl的特定: XMl文档必须包含根元素.该元素是所有其他元素的父元素.XML文档中的元素形成了一颗文档树,树中的每个元素都可存在子元素. 所有XML元素都必须有关闭标签. XML标签对大小写敏感,并且所有属性值date都需加引号. XML元素: XMl元素是只从包括开始标签到结束标签的部分,元素可包含其他元素.文本或两者都包含,也可拥有属性. XML解析 基础方法:DOM.SAX DOM解析:平台无关的官方解析方式 SAX解析:Java中基于事

Java学习总结(21)——XML文档解析:DOM解析,SAX解析

一.XML简介1.可扩展性标记语言(eXtensible Markup Language)2.XML用于描述数据3.应用场合:(1)持久化存储数据(2)数据交换(3)数据配置4.XML语法(1)文档类型:在编写XML文档时,需要先使用文档声明,声明XML文档的类型.最简单的声明语法:<?Xml version="1.0" ?>用encoding属性说明文档的字符编码:<?Xml version="1.0" encoding="GB2312