DOM和SAX总结

DOM主要知识要点:

树的概念,对象树的概念,几种重要的接口及其继承关系,Document,工厂的原理.NodeType相关,getChildNodes()相关;Node那里的那个表格要看看,即NodeValue

DOM是种标准,可用于XML,也可用于HTML,作为W3C的标准接口规范,目前,DOM由三部分组成,包括:核心(core)、HTML和XML。核心部分是结构化文档比较底层对象的集合,这一部分所定义的对象已经完全可以表达出任何HTML和XML文档中的数据了。HTML接口和XML接口两部分则是专为操作具体的HTML文档和XML文档所提供的高级接口,使对这两类文件的操作更加方便!

DOM树

<?xml version="1.0" encoding="gb2312"?>
<addressbook>
<person sex = "male">
<name>张三</name>
<email>zhs@xml.net.cn</email>
</person>
<person sex = "male">
<name>李四</name>
<email>ls@xml.net.cn</email>
</person>
</addressbook>

要严格区分XML文档树中的根结点与根元素结点:根节点(Document)代表的是XML文档本身,是我们解析XML文档的入口,而根元素结点则表示XML文档的根元素,它对应于XML文档的Root。

 

•最常见的节点类型:
–元素:元素是 XML 的基本构件。典型地,元素可以有其它元素、文本节点或两者兼有来作为其子节点。元素节点还是可以有属性的唯一类型的节点。
–属性:属性节点包含关于元素节点的信息,但实际上,不认为它是元素的子节点
–文本:确切来讲,文本节点是:文本。它可以包含许多信息或仅仅是空白。
–文档(根节点):文档节点是整个文档中所有其它节点的父节点。(根节点不等于根元素节点!)
•较不常见的节点类型:CDATA、注释、处理指令

 

DOM的四个基本接口

在DOM接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,这一点跟就如反射中的Class对象一样,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,象Document,Element,Attribute,Text,Comment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。

 

解析器:

•XML解析器实际上就是一段代码,它读入一个XML文档并分析其结构。
•分类:
–带校验的解析器
–不校验的解析器(效率高)
–支持DOM的解析器(W3C的官方标准 )
–支持SAX的解析器(事实上的工业标准 )
应用程序

     |
解析器

     |
XML文档

 

一个重要的观点:•一切都是节点(对象)

•Node对象:DOM结构中最为基本的对象
•Document对象:代表整个XML的文档
•NodeList对象:包含一个或者多个Node的列表
•Element对象:代表XML文档中的标签元素

 

关于NodeType,NodeValue,还有getChildNodes()方法

去看Node的API文档,NodeType是一个short类型的值,

getChildNodes()方法会把所有的子节点都返回来,包括它中间的空白它也把它当作为一个子节点来算的.

 

 

SAX

SAX分析器在对XML文档进行分析时,触发了一系列的事件,由于事件触发本身是有时序性的,因此,SAX提供的是一种顺序访问机制,对于已经分析过的部分,不能再倒回去重新处理。SAX之所以被叫做"简单"应用程序接口,是因为SAX分析器只做了一些简单的工作,大部分工作还要由应用程序自己去做。也就是说,SAX分析器在实现时,它只是顺序地检查XML文档中的字节流,判断当前字节是XML语法中的哪一部分、是否符合XML语法,然后再触发相应的事件,而事件处理函数本身则要由应用程序自己来实现。同DOM分析器相比,SAX分析器缺乏灵活性。然而,由于SAX分析器实现简单,对内存要求比较低,因此实现效率比较高,对于那些只需要访问XML文档中的数据而不对文档进行更改的应用程序来说,SAX分析器更为合适。

SAX分析器的大体构成框架:

图中最上方的SAXParserFactory用来生成一个分析器实例。XML文档是从左侧箭头所示处读入,当分析器对文档进行分析时,就会触发在DocumentHandler,ErrorHandler,DTDHandler以及EntityResolver接口中定义的回调方法。

•SAX是事件驱动的,文档的读入过程就是SAX的解析过程。
•在读入的过程中,遇到不同的项目,解析器会调用不同的处理方法。

 

org.xml.sax.helpers.DefaultHandler类的方法

 

SAX也是使用的观察者模式(类似于GUI中的事件)。

 

DOM和SAX两者比较:

使用DOM解析XML时,首先将XML文档加载到内存当中,然后可以通过随机的方式访问内存中的DOM树;SAX是基于事件而且是顺序执行的,一旦经过了某个元素,我们就没有办法再去访问它了,SAX不必事先将整个XML文档加载到内存当中,因此它占据内存要比DOM小,对于大型的XML文档来说,通常会使用SAX而不是DOM进行解析。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chatget

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值