之前没怎么用过SAX解析,最近项目用到了,就仔细的看了一下,然后写个简书,记录下来,以后还可以复习复习
1.说到SAX解析XML,肯定会想到DOM解析和PULL的解析,我也看了资料来区分他们的三个的,我个人认为他们三个区别在于
SAX:是根据xml的顺序依次进行解析的,读到某一个节点的时候,回去判断这个节点与xml的语 法中的对应的部分是否符合,是按照这个模式解析的
DOM:是一次性的将xml的所有内容都读取到内存中,然后操作者在遍历解析到内存中xml树,然 后再根据需求提取自己想要的部分,我认为它的优点在于很直观,所有的东西都摆在眼前 需要什么就提取什么,但是一次性的将所有的内容都读取到内存中,站在安卓的角度来 讲,这样的方式是不推荐的(抛开它所在内存的大小)
PULL:是和SAX解析很相似的一种解析,我也是分别找了2个例子做了一下对比,我认为PULL解析 是具有主动权的,主动的进行解析和结束,而SAX解析,不是主动的,只要解析开始,就必 须等到解析结束
2.下面来看一下SAX解析中用到的几个很重要的方法
/**
* 当SAX解析器解析到XML文档开始时,会调用的方法
*/
public void startDocument() throws SAXException {
super.startDocument();
}
/**
* 当SAX解析器解析到XML文档结束时,会调用的方法
*/
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
/**
* 当SAX解析器解析到某个属性值时,会调用的方法
* 其中参数ch记录了这个属性值的内容
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
}
/**
* 当SAX解析器解析到某个元素开始时,会调用的方法
* 其中localName记录的是元素属性名
*/
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
}
/**
* 当SAX解析器解析到某个元素结束时,会调用的方法
* 其中localName记录的是元素属性名
*/
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
}
以上的这个几个方法,完全可以满足我们解析一个xml的基本需要
3.大致的思路:根绝xml的内容定义个实体类,用来接收属性,然后再顶一个List,当解析到一个节点的时候如果符合就会将属性值添加到实体类 中,这样,解析完成的话,所有的属性值就都放到实体类中了,最后在判断一下根节点,如果符合就将这个实体类添加到List中 最后在你需要展示数据的页面,调用这个类,然后循环遍历去取list中的数据
4.我例子写好了,注释也写了,但是我tm不会传上来,
网友评论