android-pull方式解析xml文件以及XML文件的序列化
android解析XML ---------------------------基础要像磐石
在android平台上可以使用SAX、DOM和自带的Pull解析器解析xml文件,本文主要介绍使用pull方式解析xml。pull解析器的运行方式和SAX解析器相似,他也有开始元素和结束元素事件,并且可以循环解析。可以使用nextText()方法获取Text类型元素的值。
//如果涉及某些存储操作,需要添加Users权限
下面是将要解析的XML文件,将此xml文件存放在assets目录下。
<?xml version="1.0" encoding="utf-8"?>
<info city='3'>
<name>深圳</name>
<temp>28℃</temp>
<weather>多云</weather>
<msg>天气适宜, 穿个比基尼!</msg>
</info>
创建一个javabean来存放解析出来的数据,创建类WeatherInfo,如下
public class WeatherInfo {
private String name;
private String temp;
private String weather;
private String msg;
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 getWeather() {
return weather;
}
public void setWeather(String weather) {
this.weather = weather;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@Override
public String toString() {
return "[name=" + name + ", temp=" + temp + ", weather="
+ weather + ", msg=" + msg + "]";
} }
下面开始解析
//Context上下文,保存当前应用程序,系统资源和配置etc
AssetManager am=this.getAssets(); try {
InputStream is=am.open("weather.xml");
//1,创建xml解析器
XmlPullParser parser=Xml.newPullParser();
//2,初始化解析器,设置要解析的流数据,并设置编码方式
parser.setInput(is,"utf-8");
//3,循环解析
int type=parser.getEventType(); WeatherInfo info=new WeatherInfo();
while(type!=XmlPullParser.END_DOCUMENT){
//如果是开始标签
if(type==XmlPullParser.START_TAG){
if("name".equals(parser.getName())){
String name=parser.nextText();//获取文本数据
info.setName(name);
}else if("temp".equals(parser.getName())){
info.setTemp(parser.nextText());
}else if("weather".equals(parser.getName())){
info.setWeather(parser.nextText());
}else if("msg".equals(parser.getName())){
info.setMsg(parser.nextText());
}
}
//让解析器移动到下一个
type=parser.next();
//关闭流
is.close();
tv_weather.setText(info.toString());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Pull解析器的工作方式为允许应用程序代码主动从解析器中获取事件,正因为是主动获取事件,因此可以随时跳出。
---------------------------------------------------我是快乐的分割线--------------------------------------------------
序列化就是把对象转换成易于传输的形式。反序列化是在流中重新构建对象 XML序列化只将对象的公共字段和属性值序列化为XML流。
XML序列化不能转换方法、索引器、私有字段或只读属性(只读集合除外)。
XML序列化的核心是 XmlSerializer类
步骤:
1,设置生成xml文件位置
2,创建xml序列化器,并创建输出流
3,写数据。(可以使用循环,这样就不那么蛋疼了)
4,最后,千万不要忘记关闭流!!!千万不要忘记关闭流!!!千万不要忘记关闭流!!!
//设置生成的xml文件的位置在/data/data/包名/cache目录下
String path = this.getCacheDir().getPath();
File file = new File(path, "info.xml");
//
try {
FileOutputStream fos = new FileOutputStream(file);
// 1,创建XML序列化器
XmlSerializer serializer = Xml.newSerializer();
// 2,初始化序列化器,并设置输出流
serializer.setOutput(fos, "utf-8");// fos 是导出的文件位置 // 3,写数据,下面是一个无聊且蛋疼的过程
serializer.startDocument("utf-8", true);
// 开始标签
// Parameters:
// namespace
// name
serializer.startTag(null, "info");
serializer.startTag(null, "name");
// 设置内容
// Writes text, where special XML chars are escaped automatically
serializer.text("深圳");
serializer.endTag(null, "name"); serializer.startTag(null, "temp");
serializer.text("33℃");
serializer.endTag(null, "temp"); serializer.startTag(null, "weather");
serializer.text("多云");
serializer.endTag(null, "weather"); serializer.startTag(null, "msg");
serializer.text("天气晴朗,出来看大腿啊!!!");
serializer.endTag(null, "msg"); // 结束标签
serializer.endTag(null, "info"); serializer.endDocument(); // 不要忘记关闭流
// 不要忘记关闭流
// 不要忘记关闭流,重要的事情说三遍
fos.close();
Toast.makeText(getApplicationContext(), "成功", 0).show();
} catch (Exception e) {
e.printStackTrace();
}
序列化生成的XML文件如下
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<info>
<name>深圳</name>
<temp>33℃</temp>
<weather>多云</weather>
<msg>天气晴朗,出来看大腿啊!!!</msg>
</info>
android-pull方式解析xml文件以及XML文件的序列化的更多相关文章
- 使用pull方式解析xml文件示例:
网上的示例太多,基本类似,个人在此做个简单的总结: 1.首先在工程的asserts目录下建一个book.xml文件: <?xml version="1.0" encoding ...
- Android xmlpull 方式解析xml文件
1.新建一个xml文件,放在res/xml目录下 <?xml version="1.0" encoding="utf-8"?> <citys& ...
- Pull方式解析XML文件
package com.pingyijinren.test; import android.content.Intent; import android.os.Handler; import andr ...
- 使用PULL方式解析XML资源文件下面的xml文件
public class MainActivity extends Activity { private Button btn = null; private List<Map<Strin ...
- Android解析XML(PULL方式)
PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDocu ...
- Android pull解析xml文件
本文介绍android中使用pull来解析xml文件 先自己写一个xml文件,存一些天气信息 <?xml version="1.0" encoding="UTF-8 ...
- android使用Pull解析来自服务器的xml文件时出现错误以及解决方案
直接上代码,代码中有详细注释: 1 public class CheckUpdateManager { 2 private static final String TAG = "CheckU ...
- 【Android】使用Pull生成/解析XML文件
一.生成XML文件,即是将对象集合转为XML文件存储. 对象集合 –> XML(序列化) Android中使用android.util.Xml类对其进行了描述,提供相应的API. 步骤大致如下: ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
随机推荐
- 部署web应用到虚拟主机的三种方式
方式一: 在 [tomcat]/conf/server.xml 文件中的<Engine>标签下的<Host>标签内部, 添加一个 <Context ...
- 非负整数可重集去重&排序+获得可重集的全排列的几种方法
非负整数可重集O(n)去重并排序 可重集是指元素可重复的集合,对于在一定区间内的正整数集,比如[1,n],我们可以在不不使用任何额外空间(包括不使用O(1)的空间)的情况下,用O(n)的时间复杂度完成 ...
- Delphi 7生成XML
文件格式为: Day 制1課 U12 ASSY01 Wrist 1009 0 2018/05/18 09:35:59 Day 制1課 U12 ASSY02 Wrist 1010 0 2018/05/1 ...
- 继续推荐几款VisualStudio的插件(二)
今天晚上闲着的时候逛了一下,发现了几款不错的VisualStudio插件,这里推荐一下: Exception Breaker 在调试的时候,为了及时发现错误,我们常常会打开"总是引发所有CL ...
- 【摘】请问make -j8 和make -j4 是什么意思?什么作用?
看到别人写的Shell脚本中有 make -j8 等字眼,Google了一下,网友说是: make linux kernel/rootfs时候多线程执行.
- Delphi Delay 延时计数的功能。 下面的方法都是思路,但是没有用在项目上
procedure Tfrm_InstrumentControl.aa;var CurLength: Word; vTimeLength: Word;begin Screen.Cursor := cr ...
- 请用心练完这16个webpack小例子
16个demo,webpack+react搭配使用首先教大家2个新技能 1.按照正常github地址情况下,你的github本身不能访问目录. 例如要访问vue-demo下的vueCpu文件夹:htt ...
- 使用apt-mirror建立局域网内的Debian/Ubuntu源镜像
转:http://forum.ubuntu.org.cn/viewtopic.php?t=41791 第一次翻译,翻译得不好还请大家见谅,多多指出错误~!:) 原文可以见如下的贴子:http://fo ...
- 在Windows平台下安装与配置Memcached及C#使用方法
1.在Windows下安装Memcached 资料来源:http://www.jb51.net/article/30334.htm 在Windows平台下安装与配置Memcached的方法,Memca ...
- 利用“进程注入”实现无文件复活 WebShell
引子 上周末,一个好兄弟找我说一个很重要的目标shell丢了,这个shell之前是通过一个S2代码执行的漏洞拿到的,现在漏洞还在,不过web目录全部不可写,问我有没有办法搞个webshell继续做内网 ...