Android SAX读取XML文件

        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);



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值