学习目标:
1、了解SAX的原理
2、掌握使用SAX读取XML文档
3、了解SAX和DOM的区别
学习过程:
一、Dom和Sax的区别
1、DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。
2、SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档 。SAX在概念上与DOM完全不同,这种读入也就SAX的解析过程被称为事件驱动型,而DOM被称作文档驱动。通常,SAX还比它的替代者DOM快许多,因此在一般开发中被优先采用。
相比之下,DOM比较适合在内存比较大,而且可能需要多次操作这个XML文件的情况下使用。而SAX方式比较适合内存有限,比如手机设备使用,一般解析完成之后,不需要多次反复的操作这个XML文件的情况下使用。
二、使用SAX解析XML
1、新建一个Student.xml和对应的javaBean对象。
Student.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student>
<id>1</id>
<name>刘保</name>
<age>50</age>
</student>
<student>
<id>2</id>
<name>刘德华</name>
<age>40</age>
</student>
<student>
<id>3</id>
<name>曾志伟</name>
<age>30</age>
</student>
</students>
对应的javaBean对象使用上一节可的Student对象,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
2、新建一个MyHandler类,继承DefaultHandler。实现基于事件驱动的方式解析XML。这个类是解析的核心代码,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
|
3、实现类。定义SaxXml类,使用上面的MyHandler类解析,实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
4、测试。
在SaxXml类中添加一个main方法,测试是否能解析成功。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
输出如下:
可以全部解析成功。