xml的生成与解析_老师笔记
使用序列化器生成一个xml文件
//1,初始化一个xml文件的序列化器
XmlSerializer serializer = Xml.newSerializer();
//2.初始化序列器参数
File file = new File(Environment.getExternalStorageDirectory(),"backup.xml");
FileOutputStream fos = new FileOutputStream(file);
serializer.setOutput(fos, "UTF-8");
//3.开始写xml文件.
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "smss");
for(SmsInfo info : smsInfos){
//开始写sms节点
serializer.startTag(null, "sms");
//开始写body节点
serializer.startTag(null, "body");
serializer.text(info.getBody());
//body节点结束
serializer.endTag(null, "body");
//开始写address节点
serializer.startTag(null, "address");
serializer.text(info.getAddress());
serializer.endTag(null, "address");
//开始写data节点
serializer.startTag(null, "date");
serializer.text(info.getDate()+"");
serializer.endTag(null, "date");
// sms节点结束
serializer.endTag(null, "sms");
}
//smss根节点结束
serializer.endTag(null, "smss");
//xml 结束
serializer.endDocument();
fos.close();
Toast.makeText(this, "备份短信成功", 0).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "备份短信失败", 0).show();
}
#12.使用pull解析xml格式的数据 (重要)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置activity显示的布局
setContentView(R.layout.activity_main);
TextView tv_info = (TextView) findViewById(R.id.tv_info);
StringBuilder sb = new StringBuilder();
try {
//获取我们解析出来的天气信息
List<Channel> channels = WeatherService.getAllWeatherInfos(getClass().getClassLoader().getResourceAsStream("weather.xml"));
for(Channel channel : channels){
sb.append(channel.toString());
sb.append("\n");
}
//把解析出来的天气信息设置到textview上
tv_info.setText(sb.toString());
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "解析天气信息失败", 0).show();
}
}
}
---------------------------------------------------------------
public class WeatherService {
/**
* 解析服务器返回的数据 获取天气信息
* @param is 服务器返回的包含天气信息的流 (xml)
* @return
*/
public static List<Channel> getAllWeatherInfos(InputStream is) throws Exception{
List<Channel> channels = null;
Channel channel = null;
//1.获取xml解析器
XmlPullParser parser = Xml.newPullParser();
//2.设置xml解析器的参数
parser.setInput(is, "utf-8");
//3.开始解析xml文件.
int type = parser.getEventType();// 获取当前的事件的类型
while (type!=XmlPullParser.END_DOCUMENT){ //需要让pull解析器解析到文件的末尾
switch (type) {
case XmlPullParser.START_TAG:
if("weather".equals(parser.getName())){//总的开始节点
channels = new ArrayList<Channel>(); //初始化集合
}else if("channel".equals(parser.getName())){//某个城市的信息开始了.
channel = new Channel();
//获取到id的属性值
String id = parser.getAttributeValue(0);
channel.setId(Integer.parseInt(id));
//解析city节点
}else if("city".equals(parser.getName())){
String city = parser.nextText();
channel.setCity(city);
//解析温度节点
}else if("temp".equals(parser.getName())){
String temp = parser.nextText();
channel.setTemp(temp);
//解析风力节点
}else if("wind".equals(parser.getName())){
String wind = parser.nextText();
channel.setWind(wind);
//解析pm250节点
}else if("pm250".equals(parser.getName())){
String pm250 = parser.nextText();
channel.setPm250(Integer.parseInt(pm250));
}
break;
//判断xml的结束节点
case XmlPullParser.END_TAG:
if("channel".equals(parser.getName())){
//把解析的内容加入到集合中
channels.add(channel);
channel = null;
}
break;
}
type = parser.next();
}
is.close();
return channels;//把所有的频道的集合返回回去
}
}
xml的生成与解析_老师笔记的更多相关文章
- 在Salesforce中处理Xml的生成与解析
在Salesforce中处理Xml的生成与解析 1): Generate Xml private String ConvertAccountToXmlInfo(Account acc){ Dom.Do ...
- android xml的生成与解析
Main java package com.itheima.xml; import android.app.Activity; import android.content.Context; impo ...
- Android(java)学习笔记185:xml文件生成
1.xml文件: 用元素描述数据,跨平台. 2.利用传统的方式创建xml文件,下面是一个案例: 设计思路:建立一个学生管理系统,创建xml文件保存学生信息: (1)首先是布局文件activity_ma ...
- dom4j生成和解析xml文件
dom4j生成和解析xml文件 要生成和解析如下格式的xml文件: <?xml version="1.0" encoding="UTF-8"?> & ...
- DOM4J生成、解析XML实例
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterato ...
- JDOM生成、解析XML实例
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- Java解析XML与生成XML文件
XML是eXtensible Markup Language(可扩展标记语言)的简写形式,它是一种元标记语言(meta-markup language),也就是说它没有一套能够适用于各个领域中所有用户 ...
- Android中XML文件的序列化生成与解析
xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较 ...
- Android学习记录(1)—Android中XML文件的序列化生成与解析
xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较 ...
随机推荐
- iis下FastCGI 的常见Error错误
用iis服务器+FastCGI配置的php环境会经常出现FastCGI Error的错误,像5 (0x80070005).2147467259(0x80004005).1413 (0x80070585 ...
- Codeforces Round #333 (Div. 2) A. Two Bases 水题
A. Two Bases Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/602/problem/ ...
- Codeforces Round #277 (Div. 2) E. LIS of Sequence DP
E. LIS of Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/486/pr ...
- BZOJ 3931: [CQOI2015]网络吞吐量 最大流
3931: [CQOI2015]网络吞吐量 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 1005: [HNOI2008]明明的烦恼 Purfer序列 大数
1005: [HNOI2008]明明的烦恼 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- [置顶] VC++界面编程之--自定义CEdit(编辑框)皮肤
自定义编辑框是登陆界面经常用到的效果,所以我也模仿站酷网的素材做了个. 要想继承CCustomDraw来完全自绘CEdit控件,是不太可行的方案,因为一旦你完全重绘,那么你需要额外做以下几件事: 1. ...
- S5PV210开发系列四_uCGUI的移植
S5PV210开发系列四 uCGUI的移植 象棋小子 1048272975 GUI(图形用户界面)极大地方便了非专业用户的使用,用户无需记忆大量的命令,取而代之的是能够通过窗体.菜单 ...
- VirtualBOX 虚拟机安装 OS X 10.9 Mavericks 及 Xcode 5,本人X220亲测
原文链接:http://bbs.weiphone.com/read-htm-tid-7625465.html 建议电脑要求 Windows 7/8, 32 / 64 bit CPU Int ...
- hdfs: 一个分布式文件系统(一)
一. hdfs设计的动机 为大规模分布式计算准备的分布式文件系统,并非实时性要求很高的文件系统. 二. 设计的取舍 1. 因为要求有高吞吐量,所以牺牲读取文件的实时性,实时性要求高的分布式文件系统可以 ...
- C#中ROUND函数的问题 解决
ROUND()是C#中math的一个成员函数.System.Math.Round(),这个函数有四种用法,最长用的是对小数点位数的舍入.但这和现实生活中的“四舍五入”有一定区别,也有别JAVA中Mat ...