1. 创建XML文件对象及其序列化

示例代码:(模拟以xml格式备份短信到SD卡)

SmsInfo.java, bean对象

/**
* 短信的业务bean
* @author Administrator
*
*/
public class SmsInfo {
private String body;
private String number;
private int type;
private long id; public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public SmsInfo() {
} public SmsInfo(String body, String number, int type,long id) {
this.body = body;
this.number = number;
this.type = type;
this.id = id;
} public String getBody() {
return body;
} public void setBody(String body) {
this.body = body;
} public String getNumber() {
return number;
} public void setNumber(String number) {
this.number = number;
} public int getType() {
return type;
} public void setType(int type) {
this.type = type;
} }

SmsUtils.java 工具类

public class SmsUtils {

	/**
* 短信备份的工具方法
* @param file 短信备份到哪个文件里面
* @param smsInfos 要备份的短信对象的集合.
*/
public static void backUpSms(File file, List<SmsInfo> smsInfos) throws Exception{
//xml文件的序列号器 帮助生成一个xml文件
FileOutputStream fos = new FileOutputStream(file);
//1.获取到xml的序列号器
XmlSerializer serializer = Xml.newSerializer();
//2.序列化器的初始化
serializer.setOutput(fos, "utf-8"); //文件的编码方式 utf-8
//3.创建xml文件,编码和是否独立,如果独立,一个xml文件 就会包含所有信息
serializer.startDocument("utf-8", true);
serializer.startTag(null, "smss"); //循环的把所有的短信数据都写到 xml文件里面
for(SmsInfo info: smsInfos){
serializer.startTag(null, "sms");
serializer.attribute(null, "id", String.valueOf(info.getId())); serializer.startTag(null, "body");
serializer.text(info.getBody());
serializer.endTag(null, "body"); serializer.startTag(null, "type");
serializer.text(info.getType()+"");
serializer.endTag(null, "type"); serializer.startTag(null, "number");
serializer.text(info.getNumber());
serializer.endTag(null, "number"); serializer.endTag(null, "sms");
}
serializer.endTag(null, "smss");
serializer.endDocument(); fos.flush();
fos.close();
}
}

MainActivity.java

public class MainActivity extends Activity {

	@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); List<SmsInfo> smsInfos = new ArrayList<SmsInfo>(); //模拟创建两个短信数据的对象.
SmsInfo sms1 = new SmsInfo("你好啊 短信1", "5556", 1,9999);
SmsInfo sms2 = new SmsInfo("你好啊 短信2", "5558", 1,8888); smsInfos.add(sms1);
smsInfos.add(sms2); File file = new File(Environment.getExternalStorageDirectory(),"back.xml");
try {
SmsUtils.backUpSms(file, smsInfos);
Toast.makeText(this, "备份短信成功", 0).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "备份短信失败", 0).show();
}
}
}

2. pull解析XML文件

示例代码:(模拟解析xml格式的天气情况)

weather.xml 需要解析的XML文件

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<weather>
<day id="1">
<wendu>18</wendu>
<wind>5</wind>
<type>晴</type>
</day>
<day id="2">
<wendu>16</wendu>
<wind>3</wind>
<type>雨</type>
</day>
</weather>

Weather.java, bean

public class Weather {
private int wendu;
private int wind;
private String type;
private int id;
public int getWendu() {
return wendu;
}
public void setWendu(int wendu) {
this.wendu = wendu;
}
public int getWind() {
return wind;
}
public void setWind(int wind) {
this.wind = wind;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "天气信息 [温度=" + wendu + ", 风力=" + wind + "级 , 天气状况=" + type
+ ", 未来第=" + id + "天]";
}
}

WeatherService.java,业务类

public class WeatherService {
/**
* 解析获取天气信息
*
* @param is
* 天气信息xml文件对应的流
* @return
* @throws Exception
*/
public static List<Weather> getWeather(InputStream is) throws Exception {
// 解析 天气的xml文件.
// 1.获取到一个xml文件的解析器.
XmlPullParser parser = Xml.newPullParser();
// 2.初始化解析器.
parser.setInput(is, "utf-8");
// 3.解析xml文件.
// 得到当前解析条目的节点类型.
int eventType = parser.getEventType(); // 第一次被调用的时候 定位在xml开头
List<Weather> weatherInfos = null;
Weather weatherInfo = null;
while (eventType != XmlPullParser.END_DOCUMENT) {// 需要 不停的让 解析器解析下一个节点
switch (eventType) {
case XmlPullParser.START_TAG:
if ("weather".equals(parser.getName())) {
// 发现开始节点 为weather 创建集合
weatherInfos = new ArrayList<Weather>();
} else if ("day".equals(parser.getName())) {
// 发现一个新的日期 对应的天气
weatherInfo = new Weather();
String id = parser.getAttributeValue(0);
weatherInfo.setId(Integer.parseInt(id));
} else if ("wendu".equals(parser.getName())) {
String wendu = parser.nextText();
weatherInfo.setWendu(Integer.parseInt(wendu));
} else if ("wind".equals(parser.getName())) {
String wind = parser.nextText();
weatherInfo.setWind(Integer.parseInt(wind));
} else if ("type".equals(parser.getName())) {
String type = parser.nextText();
weatherInfo.setType(type);
} break; case XmlPullParser.END_TAG:
if ("day".equals(parser.getName())) {
weatherInfos.add(weatherInfo);
}
break;
}
eventType = parser.next();// 控制解析器 解析下一个节点
}
is.close();
return weatherInfos; }
}

MainActivity.java

public class MainActivity extends Activity {

	@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.tv_weather); try {
StringBuilder sb = new StringBuilder();
List<Weather> weatherinfos = WeatherService.getWeather(getClassLoader().getResourceAsStream("weather.xml"));
for(Weather weather : weatherinfos){
sb.append(weather.toString());
sb.append("\n"); }
tv.setText(sb.toString()); } catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "解析天气信息失败", 0).show();
}
}
}

Android -- 创建XML文件对象及其序列化, pull解析XML文件的更多相关文章

  1. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  2. Android SAX、DOM、Pull解析xml文件剖析与案例讲解

    XML介绍 XML(Extensible Markup Language) 即可扩展标记语言,与HTML一样,都是SGML(Standard Generalized Markup Language,标 ...

  3. 使用PULL解析XML文件

    转载博文1:http://blog.csdn.net/wangkuifeng0118/article/details/7313241 XmlPull和Sax类似,是基于流(stream)操作文件,然后 ...

  4. Android之Pull解析XML

    一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...

  5. Android——PULL解析XML

    简介 Android中常常使用XML文件保存用户的APP设置信息.因此需要对XML文件的相关操作进行了解.本文将以<学生信息管理系统>为案例背景进行介绍相关的XML解析的介绍,以及其他相关 ...

  6. Android系列--DOM、SAX、Pull解析XML

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  7. pull解析xml文件

    pull解析xml文件 先自己写一个xml文件,存一些天气信息 拿到xml文件 InputStream is = getClassLoader().getResourceAsStream(" ...

  8. PULL解析XML的运行机制详解

    PULL解析简单易上手,基本上看一遍,基本上就会解析啦,但总是感觉对PULL解析的运行机制不是很了解,就总结了以下事件驱动到底是怎么执行的.. PULL: Android内置了PULL解析器.PULL ...

  9. XListview的下拉刷新、上拉加载、用Pull解析XML

    做之前需要导入XListview的文件,此是用第三方的xListview实现的,东西没写全.此是在Fragment中实现的 //--------------XListView的布局---------- ...

随机推荐

  1. 动态获取selected的value值

    两个select选项,第一个选项可以选1-9之间的数字,第二个选项可以选0到9之间的数字,要满足成人和儿童的总和不大于9,且一个成人最多带两名儿童 <div> <span>成人 ...

  2. jCarousel.js 插件

    轮播图 中间放大 内容跟着切换 (参考 米趣 网站) html   <div class="jcarousel-wrapper"> <div class=&quo ...

  3. 修改jquery.automeplete,使其支持value匹配

    原生只会去匹配label,可在实际使用中,可能需要匹配的值并不需要显示在label中,经过添加一个matchType属性解决 1.加入matchType选项,并默认为原生匹配 $.widget(&qu ...

  4. MFC 单选按钮组向导添加和动态创建

    单选按钮组的动态生成 单选按钮也属于CButton类,但由于单选按钮总是成组使用的,所以它在制作和使用上与普通按钮有一定区别. 假设有三个单选按钮组成一组,初始时,第一个单选按钮处于选中状态. 我们先 ...

  5. 数值和字符串相互转换(C++ 数据类型转换技巧)

    类型转换是将一种类型的值映射为另一种类型的值.进行数据类型的转换. 是在实际代码编写中经常遇到的问题,特别是字符串和其他类型的转换. 1.将字符串转换为整数 (1).转换函数// 双精度函数doubl ...

  6. c# WinForm软件启动拦截(通过更改文件关联实现)

    前几天想做一个软件启动之前拦截的程序,找了下网上的资料没有找到合适的,突然看到电脑软件某看图软件,找到个思路就是跟他一样的,通过修改文件关联进行启动拦截. 原理是这样的,更改.exe默认的启动方式为我 ...

  7. tortoisegit错误: disconnected - no supported authentication methods available(server sent: publickey)

    修改小乌龟的 SSH客户端:

  8. 总结!linux 消耗内存和cpu 定时任务

    1. c脚本 消耗内存 1)在your_directory目录下,创建文件eatmem.c ,输入以下内容 2)编译:gcc eatmem.c -o eatmem 3) 创建定时任务,每15分钟执行: ...

  9. elastic search远程测试

    elastic search远程测试 推荐:elastic官方教程:https://www.elastic.co/guide/en/elasticsearch/reference/6.2/index. ...

  10. 003-spring结合java类调用quartz

    一.利弊 针对001 中设置,不方便程序中动态添加任务,只能使用配置进行配置任务, 适用于已知固定时刻需要执行的任务. 针对002中设置,不方便结合调用spring注入的实体 使用于程序内部新增添的任 ...