Android解析XML三种方式:
1、DOM (org.w3c.dom)文档对象模型方式,解析完的XML将生成一个树状结构的对象。
2、SAX (org.xml.sax) simpleAPI for XML,以事件的形式通知程序,对XML进行解析。
3、PULL (org.xmlpull.v1) 类似SAX方式,程序以"拉取"的方式对Xml进行解析。
本篇讲解一下SAX解析XML这种方式,首先来看一下它的基本介绍:
SAX是一种以事件驱动的XML API,由它定义的事件流可以指定从解析器传到专门的处理程序的代码的XML结构,简单的讲,它是种解析速度快,占用内存少的解析器。这种解析器比较适合android等移动设备。
使用SAX的优点:
因为SAX的优势是流的处理方式,当遇到一个标签的时候,并不会记录下当前所碰到的标签。也就是说,startElement的方法中,你所知道的信息,仅仅是当前的签名的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元素与其他结构相关的信息,都是不知道的。
我们需要使用DefaultHandler这个类来解析
类 DefaultHandler
java.lang.Object
org.xml.sax.helpers.DefaultHandler
我们通过一个简单的实例来看一下如何使用SAX解析XML这门技术:
工程目录结构
几个重要java类的源代码:
MyHandler.java
package com.sax.handler;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MyHandler extends DefaultHandler{
private HashMap<String,String> map = null; //存储单个解析出来的对象
private List<HashMap<String,String>> list = null; //存储所有解析出来的对象
private String currentTag = null; //正在解析的元素的标签
private String currentValue = null; //当前解析的元素的值
private String nodeName; //当前解析的结点名称
public MyHandler(String nodeName) {
this.nodeName = nodeName;
}
public List<HashMap<String, String>> getList() {
return list;
}
//当读取到第一个开始标签时候触发该事件
@Override
public void startDocument() throws SAXException {
list = new ArrayList<HashMap<String,String>>();
}
//当的读取到一个开始元素时触发该事件
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if(qName.equals(localName)){