Android解析XML方式

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这门技术:

工程目录结构

Android解析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)){ 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e858b0bc978368f76d635745c614a575.html