文档章节

Android学习笔记——SAX解析XML

南柯好萌
 南柯好萌
发布于 2015/09/15 14:39
字数 595
阅读 50
收藏 0

XML数据源:

<?xml version="1.0" encoding="utf-8"?>
<
WeatherWindow>
   <
updated>2015-09-08 20:00:00</updated>
   <
region><![CDATA[上海]]></region>
   <
today>
       <
condition><![CDATA[晴转多云]]></condition>
       <
temphigh>29</temphigh>
       <
templow>22</templow>
       <
image_url><![CDATA[http://media.lily.tvxio.com/icons/duoyun.png]]></image_url>
   </
today>
   <
tomorrow>
       <
condition><![CDATA[多云]]></condition>
       <
temphigh>29</temphigh>
       <
templow>29</templow>
       <
image_url><![CDATA[http://media.lily.tvxio.com/icons/duoyun.png]]></image_url>
   </
tomorrow>
</
WeatherWindow>

定义实体类:

package tv.ismar.daisy.data.weather;

/**
* Created by
<huaijiefeng@gmail.com> on 9/15/14.
*/
public class WeatherEntity {
   
private String updated;
   private
String region;

   private
WeatherDetail today;
   private
WeatherDetail tomorrow;


   public
String getUpdated() {
       
return updated;
   
}

   
public void setUpdated(String updated) {
       
this.updated = updated;
   
}

   
public String getRegion() {
       
return region;
   
}

   
public void setRegion(String region) {
       
this.region = region;
   
}

   
public WeatherDetail getToday() {
       
return today;
   
}

   
public void setToday(WeatherDetail today) {
       
this.today = today;
   
}

   
public WeatherDetail getTomorrow() {
       
return tomorrow;
   
}

   
public void setTomorrow(WeatherDetail tomorrow) {
       
this.tomorrow = tomorrow;
   
}

   
public static class WeatherDetail {

       
private String condition;
       private
String temphigh;
       private
String templow;
       private
String image_url;


       public
String getCondition() {
           
return condition;
       
}

       
public void setCondition(String condition) {
           
this.condition = condition;
       
}

       
public String getTemphigh() {
           
return temphigh;
       
}

       
public void setTemphigh(String temphigh) {
           
this.temphigh = temphigh;
       
}

       
public String getTemplow() {
           
return templow;
       
}

       
public void setTemplow(String templow) {
           
this.templow = templow;
       
}

       
public String getImage_url() {
           
return image_url;
       
}

       
public void setImage_url(String image_url) {
           
this.image_url = image_url;
       
}

   }
}

解析XML:

package tv.ismar.daisy.core.weather;

import
org.xml.sax.Attributes;
import
org.xml.sax.SAXException;
import
org.xml.sax.helpers.DefaultHandler;
import
tv.ismar.daisy.data.weather.WeatherEntity;

/**
* Created by huaijie on 9/15/15.
*/
public class WeatherInfoHandler extends DefaultHandler {

   
private final int TODAY = 5;
   private final int
TOMORROW = 6;

   private final int
UPDATED = 7;
   private final int
REGION = 8;


   private final int
CONDITION = 1;
   private final int
TEMPHIGH = 2;
   private final int
TEMPLOW = 3;
   private final int
IMAGE_URL = 4;

   private int
flg = 0;

   private
WeatherEntity weatherEntity;
   private
WeatherEntity.WeatherDetail weatherDetail;


   public
WeatherEntity getWeatherEntity() {
       
return weatherEntity;
   
}

   
@Override
   
public void startDocument() throws SAXException {
       
weatherEntity = new WeatherEntity();
   
}

   
@Override
   
public void endDocument() throws SAXException {
       
super.endDocument();
   
}


   
@Override
   
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
       
if (localName.equals("WeatherWindow")) {
           
flg = 0;
           return;
       
}

       
if (localName.equals("updated")) {
           
flg = UPDATED;
           return;
       
}

       
if (localName.equals("region")) {
           
flg = REGION;
           return;
       
}

       
if (localName.equals("today")) {
           
weatherDetail = new WeatherEntity.WeatherDetail();
           
flg = TODAY;
           return;
       
}


       
if (localName.equals("tomorrow")) {
           
weatherDetail = new WeatherEntity.WeatherDetail();
           
flg = TOMORROW;
           return;
       
}

       
if (localName.equals("condition")) {
           
flg = CONDITION;
           return;
       
}

       
if (localName.equals("temphigh")) {
           
flg = TEMPHIGH;
           return;
       
}

       
if (localName.equals("templow")) {
           
flg = TEMPLOW;
           return;
       
}

       
if (localName.equals("image_url")) {
           
flg = IMAGE_URL;
           return;
       
}


   }


   
@Override
   
public void endElement(String uri, String localName, String qName) throws SAXException {
       
if (localName.equals("today")) {
           
weatherEntity.setToday(weatherDetail);
           
weatherDetail = null;
           return;
       
}

       
if (localName.equals("tomorrow")) {
           
weatherEntity.setTomorrow(weatherDetail);
           
weatherDetail = null;
           return;
       
}
   }

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

       switch
(flg) {
           
case UPDATED:
               
weatherEntity.setUpdated(str);
               break;
           case
REGION:
               
weatherEntity.setRegion(str);
               break;
           case
CONDITION:
               
weatherDetail.setCondition(str);
               break;
           case
TEMPHIGH:
               
weatherDetail.setTemphigh(str);
               break;
           case
TEMPLOW:
               
weatherDetail.setTemplow(str);
               break;
           case
IMAGE_URL:
               
weatherDetail.setImage_url(str);
               break;
           default
:
               
return;
       
}
   }
}


运行:

SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try
{
   SAXParser saxParser = saxParserFactory.newSAXParser()
;
   
XMLReader xmlReader = saxParser.getXMLReader();
   
WeatherInfoHandler weatherInfoHandler = new WeatherInfoHandler();
   
xmlReader.setContentHandler(weatherInfoHandler);
   
InputSource inputSource = new InputSource(new StringReader(result));
   
xmlReader.parse(inputSource);

   
WeatherEntity weatherEntity = weatherInfoHandler.getWeatherEntity();

   
Log.i(TAG, "update: " + weatherEntity.getUpdated() + " region: " + weatherEntity.getRegion());
   
Log.i(TAG, "today condition: " + weatherEntity.getToday().getCondition());
   
Log.i(TAG, "today temphigh: " + weatherEntity.getToday().getTemphigh());
   
Log.i(TAG, "today templow: " + weatherEntity.getToday().getTemplow());
   
Log.i(TAG, "today image_url: " + weatherEntity.getToday().getImage_url());

   
Log.i(TAG, "tomorrow condition: " + weatherEntity.getTomorrow().getCondition());
   
Log.i(TAG, "tomorrow temphigh: " + weatherEntity.getTomorrow().getTemphigh());
   
Log.i(TAG, "tomorrow templow: " + weatherEntity.getTomorrow().getTemplow());
   
Log.i(TAG, "tomorrow image_url: " + weatherEntity.getTomorrow().getImage_url());


   
todayWeatherTemperature.setText(weatherEntity.getToday().getTemplow() + "℃ ~ " + weatherEntity.getToday().getTemphigh() + "℃");
   
todayWeatherInfo.setText(weatherEntity.getToday().getCondition());
   
Picasso.with(mContext).load(weatherEntity.getToday().getImage_url()).into(todayWeatherIcon1);


   
tomorrowWeatherTemperature.setText(weatherEntity.getTomorrow().getTemplow() + "℃ ~ " + weatherEntity.getTomorrow().getTemphigh() + "℃");
   
tomorrowWeatherInfo.setText(weatherEntity.getTomorrow().getCondition());
   
Picasso.with(mContext).load(weatherEntity.getToday().getImage_url()).into(tomorrowWeatherIcon1);


} catch (ParserConfigurationException e) {
   e.printStackTrace()
;
} catch (SAXException e) {
   e.printStackTrace()
;
} catch (IOException e) {
   e.printStackTrace()
;
}


© 著作权归作者所有

南柯好萌
粉丝 1
博文 24
码字总数 12054
作品 0
长宁
私信 提问
Android 创建与解析XML(一)—— 概述

Android 是最常用的智能手机平台,XML 是数据交换的标准媒介,Android 中可以使用标准的XML生成器、解析器、转换器 API,对 XML 进行解析和转换。 XML,相关有DOM、SAX、JDOM、DOM4J、Xerce...

长平狐
2013/01/06
173
0
Android 创建与解析XML(六)—— 比较与使用

前面介绍了四种创建、解析XML的方式: 0、 Android 创建与解析XML(一)—— 概述 1、 Android 创建与解析XML(二)—— Dom方式 2、 Android 创建与解析XML(三)—— Sax方式 3、 Android ...

长平狐
2013/01/06
1K
0
Android读写XML(上)

注明:本文转自http://www.moandroid.com. 原文地址: http://www.moandroid.com/?p=508 XML 经常用作 Internet 上的一种数据格式,其文件格式想必大家都比较清楚,在这里我结合Android平台,...

晨曦之光
2012/03/01
404
0
Android 创建与解析XML(三)—— Sax方式

1. Sax概述 SAX是一种占用内存少且解析速度快的解析器,它采用的是事件启动,不需要解析完整个文档,而是按照内容顺序看文档某个部分是否符合xml语法,如果符合就触发相应的事件,所谓的事件...

长平狐
2013/01/06
106
0
SVG前戏—让你的View多姿多彩

什么是SVG SVG的全称是Scalable Vector Graphics,叫可缩放矢量图形。是一种基于可扩展标记语言(XML)。它和位图(Bitmap)相对,SVG不会像位图一样因为缩放而让图片质量下降。它的优点在于...

codeGoogle
2018/08/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

可见性有序性,Happens-before来搞定

写在前面 上一篇文章并发 Bug 之源有三,请睁大眼睛看清它们 谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发 Bug 为了解决 CPU,内存,IO ...

tan日拱一兵
18分钟前
2
0
网络七层模型与TCP/UDP

为了使全球范围内不同的计算机厂家能够相互之间能够比较协调的进行通信,这个时候就有必要建立一种全球范围内的通用协议,以规范各个厂家之间的通信接口,这就是网络七层模型的由来。本文首先...

爱宝贝丶
21分钟前
2
0
Jenkins World 贡献者峰会及专家答疑展位

本文首发于:Jenkins 中文社区 原文链接 作者:Marky Jackson 译者:shunw Jenkins World 贡献者峰会及专家答疑展位 本文为 Jenkins World 贡献者峰会活动期间的记录 Jenkins 15周岁啦!Jen...

Jenkins中文社区
39分钟前
8
0
杂谈:面向微服务的体系结构评审中需要问的三个问题

面向微服务的体系结构如今风靡全球。这是因为更快的部署节奏和更低的成本是面向微服务的体系结构的基本承诺。 然而,对于大多数试水的公司来说,开发活动更多的是将现有的单块应用程序转换为...

liululee
54分钟前
7
0
OSChina 周二乱弹 —— 我等饭呢,你是不是来错食堂了?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ 自行车丢了:给主编推荐首歌 《クリスマスの夜》- 岡村孝子 手机党少年们想听歌,请使劲儿戳(这里) @烽火燎原 :国庆快来,我需要长假! ...

小小编辑
今天
609
11

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部