`
hellojyj
  • 浏览: 61705 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Android 采用pull解析xml文件

 
阅读更多

XML文件:

<?xml version="1.0" encoding="utf-8"?>

<infos>
	<city id="1">
		<name>上海</name>
		<temperature>15℃~20℃</temperature>
		<weather>多云转晴</weather>
		<wind>偏东风3~5级</wind>
	</city>
	<city id="1">
		<name>北京</name>
		<temperature>18℃~22℃</temperature>
		<weather>阵雨转多云</weather>
		<wind>偏东风4~8级</wind>
	</city>
	<city id="1">
		<name>哈尔滨</name>
		<temperature>5℃~10℃</temperature>
		<weather>晴</weather>
		<wind>偏东风1~2级</wind>
	</city>
</infos>

 

Java代码:

package cn.jinyejun.android_domain;

/**
 * 天气对象,用来保存天气所有属性
 * 
 * @author jinyejun
 * @date 2014-10-31 17:00
 */
public class WeatherInfo {
	private int id;
	private String name;
	private String temperature;
	private String weather;
	private String wind;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getTemperature() {
		return temperature;
	}

	public void setTemperature(String temperature) {
		this.temperature = temperature;
	}

	public String getWeather() {
		return weather;
	}

	public void setWeather(String weather) {
		this.weather = weather;
	}

	public String getWind() {
		return wind;
	}

	public void setWind(String wind) {
		this.wind = wind;
	}

	@Override
	public String toString() {
		String str = String.format("%s\n温度:%s\n天气:%s\n风速:%s", name,
				temperature, weather, wind);
		System.out.println();
		return str;
	}
}

 

package cn.jinyejun.android_service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.content.Context;
import android.util.Xml;
import android.widget.Toast;
import cn.jinyejun.android_domain.WeatherInfo;

/**
 * 天气业务类 用来解析xml文件获取天气信息
 * 
 * @author jinyejun date : 2014-10-31 17:00
 */
public class WeatherService {

	/**
	 * 用Pull方式解析xml文件
	 * 
	 * @param context
	 *            上下文
	 * @param is
	 *            xml文件流
	 * @return weatherInfo 获取的天气集合
	 */
	public final static List<WeatherInfo> getWeatherInfo(Context context,
			InputStream is) {
		
		//创建xml文件解析器
		XmlPullParser parser = Xml.newPullParser();
		try {
			//指定xml文件输入流以及编码方式
			parser.setInput(is, "utf-8");
			//创建天气对象用来存放天气各个属性
			WeatherInfo info = null;
			//创建天气集合,用来保存解析到的每个天气对象
			List<WeatherInfo> weatherInfo = null;
			//获取解析器解析到的事件类型
			int type = parser.getEventType();
			
			//当事件类型不是文档结束标志的时候继续执行
			while (type != XmlPullParser.END_DOCUMENT) {
				
				switch (type) {
				
				//如果遇到开始标签,那么根据标签获取实际内容并且给天气对象对应属性赋值
				case XmlPullParser.START_TAG:
					if ("infos".equals(parser.getName())) {
						weatherInfo = new ArrayList<WeatherInfo>();
					} else if ("city".equals(parser.getName())) {
						info = new WeatherInfo();
						String idStr = parser.getAttributeValue(null, "id");
						info.setId(Integer.parseInt(idStr));
					} else if ("name".equals(parser.getName())) {
						String name = parser.nextText();
						info.setName(name);
					} else if ("temperature".equals(parser.getName())) {
						String temperature = parser.nextText();
						info.setTemperature(temperature);
					} else if ("weather".equals(parser.getName())) {
						String weather = parser.nextText();
						info.setWeather(weather);
					} else if ("wind".equals(parser.getName())) {
						String wind = parser.nextText();
						info.setWind(wind);
					}
					break;
				//如果遇到结束标签说明已经解析完xml中一个节点
				case XmlPullParser.END_TAG:
					if ("city".equals(parser.getName())) {
						//将获取到的天气对象放在天气集合中
						weatherInfo.add(info);
						//释放info内存
						info = null;
					}
					break;
				}
				
				//很重要!!必须移到下一个,不然就是死循环
				type = parser.next();

			}
			return weatherInfo;
		} catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(context, "读取文件失败", Toast.LENGTH_SHORT);
			return null;
		}

	}
}

 

package cn.jinyejun.android_weatherreport;

import java.io.InputStream;
import java.util.List;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;
import cn.jinyejun.android_domain.WeatherInfo;
import cn.jinyejun.android_service.WeatherService;

public class MainActivity extends ActionBarActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		TextView tv = (TextView) findViewById(R.id.tv_content);
		
		//用类加载器获取对应目录下的xml文件,放回文件输入流
		InputStream is = MainActivity.class.getClassLoader().getResourceAsStream("weather.xml");
		//获取天气集合
		List<WeatherInfo> infos = WeatherService.getWeatherInfo(this, is);
		StringBuffer sb = new StringBuffer();
		for(WeatherInfo info: infos){
			sb.append(info.toString());
			sb.append("\n\n");
		}
		tv.setText(sb.toString());
	}
}

 

分享到:
评论

相关推荐

    android之Pull解析XML文件

    总结,Android的Pull解析XML文件是一种高效、节省资源的解析方式,适用于网络通信中的数据交换。通过创建Pull解析器实例,监听XML事件,以及适当优化,开发者可以轻松处理XML数据,实现更流畅的用户体验。在实际开发...

    android使用pull 解析xml文件源码

    pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...

    android xml pull解析示例

    在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...

    android SAX PULL 解析XML文件 代码 详解

    SAX解析适合大型XML文件和复杂结构,而PULL解析则适用于小型XML文件和简单结构。在提供的`SAXParseDemo`项目中,你可以找到具体的SAX解析实现,通过阅读和理解代码,可以更好地掌握这两种解析方法的使用。 总之,...

    Android中,使用SAX和PULL解析天气预报XML

    该文章详细介绍了在Android环境下如何使用SAX和PULL解析XML,包括代码示例和步骤说明,对于初学者来说非常有帮助。 最后,压缩包中的"Weather"文件很可能是示例的天气预报XML数据。通过实际解析这个文件,你可以更...

    android中使用PULL解析XML

    **使用PULL解析XML的步骤** 1. **引入库** 首先,在Android项目中,我们需要引入`xmlpull.org`的库,这个库已经被包含在Android SDK中,无需额外下载。在代码中,我们可以通过以下方式获取到PULL解析器: ```java ...

    pull解析xml文件

    pull解析xml文件

    Android之PULL解析XML文件——新浪微博客户端首页效果

    在本主题"Android之PULL解析XML文件——新浪微博客户端首页效果"中,我们将深入探讨如何利用PULL解析器(PullParser)来处理XML数据,从而实现类似新浪微博客户端首页的动态效果。这种效果通常包括新闻标题、摘要、...

    android pull解析xml源码

    "Android pull解析xml源码"这个主题聚焦于使用Android的XML Pull解析器来理解和操作XML文档。Pull解析器是一种事件驱动的解析方法,与DOM(Document Object Model)和SAX(Simple API for XML)不同,它不需要将整个...

    Android利用pull生成xml文件

    "Android利用Pull生成XML文件"这一主题涉及到的是如何使用Android的Pull解析器来读取和生成XML内容。Pull解析器是一种轻量级、低级别的解析机制,与DOM(文档对象模型)和SAX(简单API for XML)解析器相比,它更...

    Android 封装pull解析xml

    以下是一些关于封装Pull解析XML的关键知识点: 1. **创建XMLPullParser实例**: Android系统提供了`XmlPullParserFactory`类,通过`newInstance()`方法创建XMLPullParser的工厂对象,然后使用`newPullParser()`...

    在android中使用pull解析xml文件

    本文将深入探讨如何在Android中使用Pull解析器解析XML文件。 一、XML Pull解析器简介 XML Pull解析器(XML Pull API)是一种基于事件驱动的解析模型,它不需预先加载整个XML文档,而是逐行读取,当遇到特定的XML...

    Pull解析xml源码导入即可用

    本文将深入探讨Android中的Pull解析XML技术,以及如何利用模板快速实现XML的解析。 首先,理解XML Pull解析器的工作原理是至关重要的。在Android中,XML Pull解析是一种轻量级处理XML文档的方式,它允许应用移动...

    使用Pull解析xml文件

    XML(eXtensible Markup Language...总结,PULL解析器是Android开发中处理XML文件的一种高效手段,尤其适用于资源有限的移动环境。通过掌握其工作原理和使用方法,开发者可以更好地优化应用程序的性能,提高用户体验。

    Android ReadXmlByPull 使用Pull解析Xml文件.rar

    在Android开发中,处理XML数据是一项常见的任务...通过创建解析器、设置输入源、处理事件以及异常处理,开发者可以轻松地读取和解析XML文件。在实际应用中,可以根据具体需求调整解析逻辑,以实现更复杂的XML数据处理。

    Android 采用pull生成XML数据

    在Android应用开发中,解析XML数据是常见的需求,例如从网络服务获取数据或者读取本地资源文件。本篇文章将深入探讨如何在Android中使用Pull解析器生成XML数据。 Pull解析器是一种轻量级的解析方式,相比DOM...

    Android PULL解析XML

    总结,本教程介绍了如何在Android中使用PULL解析XML,以及如何结合ButterKnife进行视图绑定。PULL解析提供了高效且内存友好的方式处理XML数据,而ButterKnife则简化了UI组件的管理,两者结合能有效提升开发效率。...

    Android之PULL解析XML

    通过上述步骤,你可以在Android应用中有效地解析XML文件,从而提取并处理其中的数据。这种方式对内存的占用小,适合处理大型XML文档,是Android开发中的一个重要工具。在实际项目中,你可能需要根据具体需求进行调整...

    使用Android自带的XML解析器PULL解析器简单的解析xml

    Android系统提供了一种轻量级的XML解析方式——PULL解析器(Pull Parser),它适用于处理大型XML文档,因为它不需要像DOM解析器那样一次性加载整个XML文档到内存中。PULL解析器通过事件驱动的方式,按需解析XML文档...

    Android 生成和PULL解析xml

    本文将深入探讨如何在Android中生成XML文件以及如何使用PULL解析器来解析XML数据。 首先,我们来看一下如何在Android中生成XML文件。生成XML文件通常涉及创建一个XMLWriter对象,然后通过调用其方法来添加元素、...

Global site tag (gtag.js) - Google Analytics