Android SAX读取XML文件

来源:互联网 发布:新版本淘宝高级搜索 编辑:程序博客网 时间:2024/06/05 11:14

        SAX解析器在解析XML输入的构件时就报告事件,但不会以任何方式存储文档。由事件处理器决定是否要建立数据结构。实际上,DOM解析器是在SAX解析器的基础上建立起来的,它在接收到解析器事件时建立DOM树。DOM相对于SAX,显得更加笨重,对小文件的读写,虽然没有什么分别,但是文件一大起来就难以想象了,如果在移动设备上使用,肯定会严重影响用户体验,而SAX却是一个轻量级的XML解析器,很适合在移动设备上使用!现在,让我来介绍一下SAX在Android设备上的使用方法:

        第一步:首先建立一个getXML()的方法:

    private void getXML(URL url)    {    try     {    SAXParserFactory spf = SAXParserFactory.newInstance();SAXParser sp = spf.newSAXParser();XMLReader xr = sp.getXMLReader();SAXHandler handler = new SAXHandler();xr.setContentHandler(handler);InputStreamReader isr = new InputStreamReader(url.openStream(), "UTF-8");InputSource is = new InputSource(isr);xr.parse(is);    }    catch(Exception e)    {    e.printStackTrace();    }    }


         第二步:当SAX解析器从本地或者从网络上的流读取到符合XML格式要求的内容,就会调用Handler类。SAX在android系统上提供了一个DefaultHandler的Handler子类,并且会自动调用这个DefaultHandler接口的相应方法!重写这个DefaultHandler接口,并命名为:SAXHandler:

import java.util.HashMap;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import android.util.Log;public class SAXHandler extends DefaultHandler{public void startDocument() throws SAXException{super.startDocument();}public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException{super.startElement(uri, localName, name, attributes);}public void characters(char ch[], int start, int length){}public void endElement(String uri, String localName, String name) throws SAXException{super.endElement(uri, localName, name);}public void endDocument() throws SAXException{                  super.endDocument();}}

    在使用SAX解析器时,需要一个处理器来定义不同的解析器事件的事件动作。DefaultHandler接口定义了若干个回调方法。从上面的代码上可以看出最重要的几个:

    # startElement和endElement在每当遇到起始或终止标签时调用。

    # characters每当遇到字符数据时调用。

    # startDocument和endDocument分别在文档开始和结束时调用一次。

    在这回调方法中,进行处理XML文件各个节点。

    在此之后,在调用getXML()方法的适当位置添加如下代码便可:

  URL url = new URL("http://www.----.com/----.xml");  getXML(url);



 

原创粉丝点击