Android SAX解析XML

Android中有SAX、DOM及PULL等方式解析xml:

SAX是一种占用内存少且解析速度快的解析器,它采用的是事件启动。官方推荐使用

以下是通过网上 获取的天气xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- published at 2011-12-14 14:55:05 -->
<Profiles>
	<Weather>
		<city>广州</city>
		<status1>多云</status1>
		<status2>阴</status2>
		<figure1>duoyun</figure1>
		<figure2>yin</figure2>
		<direction1>无持续风向</direction1>
		<direction2>无持续风向</direction2>
		<power1>≤3</power1>
		<power2>≤3</power2>
		<temperature1>20</temperature1>
		<temperature2>12</temperature2>
		<ssd>0</ssd>
		<tgd1>21</tgd1>
		<tgd2>21</tgd2>
		<zwx>2</zwx>
		<ktk>5</ktk>
		<pollution>3</pollution>
		<xcz>4</xcz>
		<zho />
		<diy />
		<fas />
		<chy>4</chy>
		<zho_shuoming>暂无</zho_shuoming>
		<diy_shuoming>暂无</diy_shuoming>
		<fas_shuoming>暂无</fas_shuoming>
		<chy_shuoming>套装、夹衣、风衣、夹克衫、西服套装、马甲衬衫配长裤</chy_shuoming>
		<pollution_l>一般</pollution_l>
		<zwx_l>弱</zwx_l>
		<ssd_l>舒适</ssd_l>
		<fas_l>暂无</fas_l>
		<zho_l>暂无</zho_l>
		<chy_l>夹衣类</chy_l>
		<ktk_l>比较适宜(制热)</ktk_l>
		<xcz_l>不太适宜</xcz_l>
		<diy_l>暂无</diy_l>
		<pollution_s>对空气污染物扩散无明显影响</pollution_s>
		<zwx_s>紫外线弱</zwx_s>
		<ssd_s>适宜在自然环境及露天场所活动。</ssd_s>
		<ktk_s>比较适宜开启空调</ktk_s>
		<xcz_s>洗车后未来1-2天内有降水、大风或沙尘天气,或洗车当日气温太低容易结冰。不太适宜洗车。</xcz_s>
		<gm>1</gm>
		<gm_l>低发期</gm_l>
		<gm_s>天气舒适,不易发生感冒;</gm_s>
		<yd>2</yd>
		<yd_l>比较适宜</yd_l>
		<yd_s>虽然天空云层较厚,比较适宜户外运动;</yd_s>
		<savedate_weather>2011-12-14</savedate_weather>
		<savedate_life>2011-12-14</savedate_life>
		<savedate_zhishu>2011-12-14</savedate_zhishu>
	</Weather>
</Profiles>

解析类:继承DefaultHandler类

package wu.lis.action;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import wu.lis.model.Weather;
import wu.lis.util.Constant;

public class WeatherHandler extends DefaultHandler {
	private Weather weather;
	private String preTag = null;// 作用是记录解析时的上一个节点名称

	@Override
	public void startDocument() throws SAXException {
		weather = new Weather();
		System.out.println("startDocument");
	}

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		preTag = qName;
		System.out.println(preTag);
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		String result = new String(ch, start, length);

		if (preTag.equals(Constant.City)) {
			if (weather.getCity() == null)
				weather.setCity(result);
		}
		if (preTag.equals(Constant.Status1)) {
			if (weather.getStatus1() == null)
				weather.setStatus1(result);
		}
		if (preTag.equals(Constant.Status2)) {
			if (weather.getStatus2() == null)
				weather.setStatus2(result);
		}
		if (preTag.equals(Constant.Figure1)) {
			if (weather.getFigure1() == null)
				weather.setFigure1(result);
		}
		if (preTag.equals(Constant.Figure2)) {
			if (weather.getFigure2() == null)
				weather.setFigure2(result);
		}

		if (preTag.equals(Constant.Direction1)) {
			if (weather.getDirection1() == null)
				weather.setDirection1(result);
		}
		if (preTag.equals(Constant.Direction2)) {
			if (weather.getDirection2() == null)
				weather.setDirection2(result);
		}

		if (preTag.equals(Constant.Power1)) {
			if (weather.getPower1() == null)
				weather.setPower1(result);
		}
		if (preTag.equals(Constant.Power2)) {
			if (weather.getPower2() == null)
				weather.setPower2(result);
		}

		if (preTag.equals(Constant.Temperature1)) {
			System.out.println(preTag);
			if (weather.getTemperature1() == null)
				weather.setTemperature1(result);
		}
		if (preTag.equals(Constant.Temperature2)) {
			if (weather.getTemperature2() == null)
				weather.setTemperature2(result);
		}

		if (preTag.equals(Constant.Ssd)) {
			if (weather.getSsd() == null)
				weather.setSsd(result);
		}
		if (preTag.equals(Constant.Ssd_l)) {
			if (weather.getSsd_l() == null)
				weather.setSsd_l(result);
		}
		if (preTag.equals(Constant.Ssd_s)) {
			if (weather.getSsd_s() == null)
				weather.setSsd_s(result);
		}

		if (preTag.equals(Constant.Tgd1)) {
			if (weather.getTgd1() == null)
				weather.setTgd1(result);
		}
		if (preTag.equals(Constant.Tgd2)) {
			if (weather.getTgd2() == null)
				weather.setTgd2(result);
		}

		if (preTag.equals(Constant.Zwx)) {
			if (weather.getZwx() == null)
				weather.setZwx(result);
		}
		if (preTag.equals(Constant.Zwx_l)) {
			if (weather.getZwx_l() == null)
				weather.setZwx_l(result);
		}
		if (preTag.equals(Constant.Zwx_s)) {
			if (weather.getZwx_s() == null)
				weather.setZwx_s(result);
		}

		if (preTag.equals(Constant.Ktk)) {
			if (weather.getKtk() == null)
				weather.setKtk(result);
		}
		if (preTag.equals(Constant.Ktk_l)) {
			if (weather.getKtk_l() == null)
				weather.setKtk_l(result);
		}
		if (preTag.equals(Constant.Ktk_s)) {
			if (weather.getKtk_s() == null)
				weather.setKtk_s(result);
		}

		if (preTag.equals(Constant.Pollution))
			if (weather.getPollution() == null)
				weather.setPollution(result);
		if (preTag.equals(Constant.Pollution_l))
			if (weather.getPollution_l() == null)
				weather.setPollution_l(result);
		if (preTag.equals(Constant.Pollution_s))
			if (weather.getPollution_s() == null)
				weather.setPollution_s(result);

		if (preTag.equals(Constant.Xcz))
			if (weather.getXcz() == null)
				weather.setXcz(result);
		if (preTag.equals(Constant.Xcz_l))
			if (weather.getXcz_l() == null)
				weather.setXcz_l(result);
		if (preTag.equals(Constant.Xcz_s))
			if (weather.getXcz_s() == null)
				weather.setXcz_s(result);

		if (preTag.equals(Constant.Chy))
			if (weather.getChy() == null)
				weather.setChy(result);
		if (preTag.equals(Constant.Chy_l))
			if (weather.getChy_l() == null)
				weather.setChy_l(result);
		if (preTag.equals(Constant.Chy_shuoming))
			if (weather.getChy_shuoming() == null)
				weather.setChy_shuoming(result);

		if (preTag.equals(Constant.Gm))
			if (weather.getGm() == null)
				weather.setGm(result);
		if (preTag.equals(Constant.Gm_l))
			if (weather.getGm_l() == null)
				weather.setGm_l(result);
		if (preTag.equals(Constant.Gm_s))
			if (weather.getGm_s() == null)
				weather.setGm_s(result);

		if (preTag.equals(Constant.Yd))
			if (weather.getYd() == null)
				weather.setYd(result);
		if (preTag.equals(Constant.Yd_l))
			if (weather.getYd_l() == null)
				weather.setYd_l(result);
		if (preTag.equals(Constant.Yd_s))
			if (weather.getYd_s() == null)
				weather.setYd_s(result);

		if (preTag.equals(Constant.Savedate_weather))
			if (weather.getSavedate_weather() == null)
				weather.setSavedate_weather(result);
		if (preTag.equals(Constant.Savedate_life))
			if (weather.getSavedate_life() == null)
				weather.setSavedate_life(result);
		if (preTag.equals(Constant.Savedate_zhishu))
			if (weather.getSavedate_zhishu() == null)
				weather.setSavedate_zhishu(result);
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if (qName.equals("Profiles")) {
			preTag = null;
		}
	}

	@Override
	public void endDocument() throws SAXException {
		super.endDocument();
		System.out.println("城市:" + weather.getCity());
		System.out.println("白天:" + weather.getStatus1());
		System.out.println("夜间:" + weather.getStatus2());
		System.out.println("白天风向:"+weather.getDirection1());
		System.out.println("夜间风向:"+weather.getDirection2());
		System.out.println("白天温度:" + weather.getTemperature1());
		System.out.println("夜间温度:" + weather.getTemperature2());
	}
}


调用解析

InputStream inStream = getClass().getClassLoader().getResourceAsStream("weather.xml");
		System.out.println(result);
		SAXParserFactory factory = SAXParserFactory.newInstance();
		try {
			SAXParser parser = factory.newSAXParser();
			XMLReader reader = parser.getXMLReader();
			reader.setContentHandler(new WeatherHandler());
			reader.parse(new InputSource(inStream));
		} catch (Exception e) {
			e.printStackTrace();
		}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值