Java 对xml 数据的解析
HTTP 网络传输中的数据组织方式有三种:
1:HTML 方式
2:XML方式
3:JSON 方式
XML :称为可扩展标记语言,他与HTML 一样,都是通用标记语言,XML是Internet环境中跨平台的,依赖与于内容技术,是目前处理结构化文档信息的有力工具,可扩展标记语言是一种简单的数据存储语言,使用一系列简单的标记描述数据。非常适合万维网的传输。
XML 的结构解析如下:
1:节点
2:元素
3: 属性和属性值。
由于XML的扩展性强,致使它需要有稳定的基础规则来扩展,规则如下:
1:开始标签和结束标签匹配,
2:嵌套标签不能互相嵌套。
3:区分大小写。
Android解析的方式如下:
1:DOM (org.w3c.dom)
“文档对象模型”方式,解析完的XML将生成一个树状的对象。
2:SAX (org.xml.asx)
以事件的形式通知程序,对XML进行解析。
3:PULL :
类似于SAX 方式,程序以“拉取”方式对XML 进行解析。
SAX以事件流来解析,边读边触发事件函数完成解析,适用于较大的XML,DOM加载整个xml文件,最终在内存中创建一个DOM树,操作DOM节点比较简单。
DOM解析与SAX 区别
在处理DOM的时候,需要读入整个XML文档,然后在内存中创建DOM树,生成DOM树上的每个NODE对象,当文档比较小的时候,不会造成问题,当文档比较大的时候,处理DOM就会变得费时,特别是内存的需求,此时对于某些应用使用DOM将得不偿失,SAX则是解决这一问题的很好选择。
SAX 是事件驱动的,器不需要读入整个文档,文档的读入过程就是SAX的解析过程,事件驱动,是指一种基于回调机制的程序运行方法,在XML Reader 接受XML文档的过程,就进行解析,
实例:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id = "1">
<name>Jack</name>
<tel>13673234578</tel>
<age>18</age>
</person>
</persons>
当XMLReader读到<persons>标签时,就会调用ContentHandler.startDocument()方法,并把标签名persons作为参数传递过去。在你实现的startElement()方法中需要做相应的动作,以处理当<persons>出现时应该做的事情。各个事件随着解析的过程(也就是文档读入的过程)一个个顺序的被抛出,相应的方法也会被顺序的调用,最后,当解析完成,方法都被调用后,对文档的处理也就完成了
下面为几个主要的方法:
void characters(char[] ch, int start, int length):这个方法用来处理在XML文件中读到字符串,它的参数是一个字符数组,以及读到的这个字符串在这个数组中的起始位置和长度,我们可以很容易的用String类的一个构造方法来获得这个字符串的String类:String charencontered=new String(ch,start,length)。
void startDocument():当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。
void endDocument():当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。
void startElement(String namespaceuri, String localname, String qname, Attributes atts):当读到一个开始标签的时候,会触发这个方法
注意:SAX中一个重要的特点就是它的流式处理,在遇到一个标签的时候,它并不会纪录下以前所碰到的标签,也就是说,在startElement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不得而知的,都需要你的程序来完成。这使得SAX在编程处理上没有DOM来得那么方便。
(由于代码片段较多,不好粘出来,所以已经上传在我的博客中,想看的小伙伴可以看看,有问题还望能及时指出,共同进步 。)