Android xml 解析
XML 经常使用的三种解析方式:
DOM: 所有载入到内存,生成一个树状结构,占用内存比較大。
SAJ: 採用事件驱动,速度快,效率高,不支持回退。
PULL:也是採用事件驱动,语法简洁。
步骤:
1. 创建XML 解析器:XmlPullParser parser = Xml.newPullParser();
2. 配置解析器:parser.setInput(is, "utf-8");// 參数为 xml 文件输入流 和 编码方式。
3. 依据事件进行解析。
int type = parser.getEventType();// 得到事件类型
type = parser.next();// 获取下一个事件
事件类型:
XmlPullParser.END_DOCUMENT 文档末尾。
XmlPullParser.START_TAG 開始标签
XmlPullParser.END_TAG 结束标签
获取标签名字:parser.getName()
获取属性: String idStr = parser.getAttributeValue(0); // 參数为属性id。
获取标签内容:String temp = parser.nextText();
代码实例:
代码结构:
WeathreService.java
package com.serviatech.weather.service; import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser;
import android.util.Xml; import com.serviatech.weather.domain.WeatherInfo; public class WeatherService { public static List<WeatherInfo> getWeatherInfos(InputStream is)
throws Exception { List<WeatherInfo> weatherInfos = null;
WeatherInfo weatherInfo = null; XmlPullParser parser = Xml.newPullParser(); parser.setInput(is, "utf-8");// 初始化解析器 int type = parser.getEventType();// 得到事件类型
while (type != XmlPullParser.END_DOCUMENT) { switch (type) {
case XmlPullParser.START_TAG: if ("infos".equals(parser.getName())) {
weatherInfos = new ArrayList<WeatherInfo>();
} else if ("city".equals(parser.getName())) {
weatherInfo = new WeatherInfo();
String idStr = parser.getAttributeValue(0);
weatherInfo.setId(Integer.parseInt(idStr));
} else if ("temp".equals(parser.getName())) {
String temp = parser.nextText();
weatherInfo.setTemp(temp);
} else if ("wind".equals(parser.getName())) {
String wind = parser.nextText();
weatherInfo.setWind(wind);
} else if ("name".equals(parser.getName())) {
String name = parser.nextText();
weatherInfo.setName(name);
} break;
case XmlPullParser.END_TAG:
if ("city".equals(parser.getName())) {
// 一个城市已经处理完成
weatherInfos.add(weatherInfo);
weatherInfo = null;// 方便垃圾回收机回
}
break;
}
type = parser.next();
}
return weatherInfos;
} } /*
* 解析过程 定义了一个指针,指向开头
*
* 标签 tag,文本
*
* 文档開始 文档结束
*
* startTag endTag
*/
WeatherInfo.java
package com.serviatech.weather.domain;
public class WeatherInfo {
private int id;
private String name;
private String temp;
private String wind;
public int getId() {
return id;
}
@Override
public String toString() {
return "WeatherInfos [城市id=" + id + ", 名字=" + name + ", 温度=" + temp
+ ", 风力=" + wind + "]";
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTemp() {
return temp;
}
public void setTemp(String temp) {
this.temp = temp;
}
public String getWind() {
return wind;
}
public void setWind(String wind) {
this.wind = wind;
}
}
/*
* DOM 所有载入到内存。生成一个树状结构,消耗内存比較大
*
* SAX 基于事件的方式,速度快,效率高,不能回退。
*
* PULL 基于事件解析,语法简洁
*/
MainActivity.java
package com.serviatech.weather; import java.util.List; import com.serviatech.weather.domain.WeatherInfo;
import com.serviatech.weather.service.WeatherService; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity { private TextView tv; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); try {
List<WeatherInfo> infos = WeatherService
.getWeatherInfos(MainActivity.this.getClassLoader()
.getResourceAsStream("weather.xml")); StringBuilder sb = new StringBuilder(); for (WeatherInfo info : infos) {
sb.append(info.toString());
sb.append("\n");
}
tv.setText(sb.toString()); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, "解析信息失败", 0).show();
} } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
Android xml 解析的更多相关文章
- android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 三: 把复杂对象转换成 xml
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 二: 把对象转换成xml
前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...
- Android] Android XML解析学习——方式比较
[Android] Android XML解析学习——方式比较 (ZT) 分类: 嵌入式 (From:http://blog.csdn.net/ichliebephone/article/deta ...
- Android XML解析器的问题
最近在项目中遇到了一个解析XML的问题,我们是用android自带的DOM解析器来解析XML的,但发现了一个android的问题,那就是在2.3的SDK上面,无法解析像<, >, 等字符串 ...
- android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件
简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换. 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件. 1.下载工具 xstr ...
- android XML解析器全解案例
1.使用pull解析 package com.example.myxml; import java.io.InputStream; import java.util.ArrayList; import ...
随机推荐
- Java使用百度云存储BCS-让你的数据下载飞起来
作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.简介 云也不是一个新概念了,云到底是什么东西,你叫我说个明明白白的我也说不出来,姑且算作联网的就叫做云.国内的云服 ...
- php笔记之GD库图片创建/简单验证码
燕十八 公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it php画图:比如说验证码,缩略图,加水印都要用到GD库,所以要开启gd2库,才能用 首先找到php.in ...
- 接受POST表单传过来的信息 可以用foreach循环进行遍历操作
if(isset($_POST['Goods'])){ foreach($_POST['Goods'] as $_k =>$_v){ ...
- hadoop 异常 ls: Cannot access .: No such file or directory.
bin/hadoop dfs -lsls: Cannot access .: No such file or directory. bin/hadoop dfs -ls /用这个命令代替试试 原因是格 ...
- BZOJ 1059 矩阵游戏
Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个\(N \times N\)黑白方阵进行(如同国际象棋一般,只是颜色是随意的). ...
- zip file 压缩文件
有时候我们希望 upload 文件后自动压缩, 可以节省空间. 可以使用微软提供的压缩代码 Install-Package System.IO.Compression.ZipFile -Version ...
- eclipse中tomcat内存溢出问题,报PermGen space
场景 最近在eclipse中的tomcat服务器下放三个不同的应用程序,其中两个应用程序用到了各自的第三方jar包.刚开始时把这三个应用程序分别部署到各自的tomcat服务器运行,没问题.后来想通过第 ...
- 关于如何在BCB中使用CodeGuard
作者:深圳虫 来自:深圳虫网本文来自http://www.szbug.com/disparticle.aspID=4 一. 为什么写这篇东西自己在使用BCB5写一些程序时需要检查很多东西,例如内存泄漏 ...
- Git各种错误汇总
1.github上版本和本地上版本冲突的方法,即提交时会提示如下错误: 解决方法,提交时采用如下代码: git push -u origin master -f 参考链接: http://blog.c ...
- WordPress Comment Extra Fields插件‘swfupload.swf’跨站脚本漏洞
漏洞名称: WordPress Comment Extra Fields插件‘swfupload.swf’跨站脚本漏洞 CNNVD编号: CNNVD-201308-027 发布时间: 2013-08- ...