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 ...
随机推荐
- 『重构--改善既有代码的设计』读书笔记----Move Method
明确函数所在类的位置是很重要的.这样可以避免你的类与别的类有太多耦合.也会让你的类的内聚性变得更加牢固,让你的整个系统变得更加整洁.简单来说,如果在你的程序中,某个类的函数在使用的过程中,更多的是在和 ...
- 使用程序往Neo4j导入CSV报错
今天在用程序向Neo4j导入csv文件时,报以下错误: java.net.ConnectException: Connection refused: connect java.rmi.ConnectE ...
- 字体圆润属性的使用-webkit-font-smoothing: antialiased
字体渲染和抗锯齿技术 据称该属性在window下不起作用,不知win10如何,但是在OS和ios中会有不同的展示效果,主要也是展示在webkit内核中,以及android和ios中 大概是说字体渲染的 ...
- WPF自定义DataGrid分页控件
新建Custom Control,名:PagingDataGrid 打开工程下面的Themes\Generic.xaml xaml里面代码替换如下 <Style x:Key="{x:T ...
- 转:php中实现精确设置session过期时间的方法
原文来自于:http://www.jb51.net/article/52309.htm 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下 ...
- 工作总结:MFC使用Windows自带打开对话框
代码: ; //Win98 as default LPARAM lModuleParam = ; TV_INSERTSTRUCT tvItem; CString sPathNameSel; ];//1 ...
- fread遇到1A则读取停止,发现是1A是文件截止符
fread遇到1A则读取停止,发现是1A是文件截止符 按二进制来读来则可以完全读取
- db2索引创建和删除
在表trpt_jv_rpt_log_td的tim列上创建索引 create index dw_rpt.irpt_jv_rpt_log_td_tim on dw_rpt.trpt_jv_rpt_log_ ...
- Context Switch Definition
A context switch (also sometimes referred to as a process switch or a task switch) is the switching ...
- UVA 10706 Number Sequence (找规律 + 打表 + 查找)
Problem B Number Sequence Input: standard input Output: standard output Time Limit: 1 second A singl ...