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文件的序列化的更多相关文章

  1. 使用pull方式解析xml文件示例:

    网上的示例太多,基本类似,个人在此做个简单的总结: 1.首先在工程的asserts目录下建一个book.xml文件: <?xml version="1.0" encoding ...

  2. Android xmlpull 方式解析xml文件

    1.新建一个xml文件,放在res/xml目录下 <?xml version="1.0" encoding="utf-8"?> <citys& ...

  3. Pull方式解析XML文件

    package com.pingyijinren.test; import android.content.Intent; import android.os.Handler; import andr ...

  4. 使用PULL方式解析XML资源文件下面的xml文件

    public class MainActivity extends Activity { private Button btn = null; private List<Map<Strin ...

  5. Android解析XML(PULL方式)

    PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDocu ...

  6. Android pull解析xml文件

    本文介绍android中使用pull来解析xml文件 先自己写一个xml文件,存一些天气信息 <?xml version="1.0" encoding="UTF-8 ...

  7. android使用Pull解析来自服务器的xml文件时出现错误以及解决方案

    直接上代码,代码中有详细注释: 1 public class CheckUpdateManager { 2 private static final String TAG = "CheckU ...

  8. 【Android】使用Pull生成/解析XML文件

    一.生成XML文件,即是将对象集合转为XML文件存储. 对象集合 –> XML(序列化) Android中使用android.util.Xml类对其进行了描述,提供相应的API. 步骤大致如下: ...

  9. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

随机推荐

  1. 部署web应用到虚拟主机的三种方式

    方式一:            在 [tomcat]/conf/server.xml 文件中的<Engine>标签下的<Host>标签内部, 添加一个 <Context ...

  2. 非负整数可重集去重&排序+获得可重集的全排列的几种方法

    非负整数可重集O(n)去重并排序 可重集是指元素可重复的集合,对于在一定区间内的正整数集,比如[1,n],我们可以在不不使用任何额外空间(包括不使用O(1)的空间)的情况下,用O(n)的时间复杂度完成 ...

  3. 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 ...

  4. 继续推荐几款VisualStudio的插件(二)

    今天晚上闲着的时候逛了一下,发现了几款不错的VisualStudio插件,这里推荐一下: Exception Breaker 在调试的时候,为了及时发现错误,我们常常会打开"总是引发所有CL ...

  5. 【摘】请问make -j8 和make -j4 是什么意思?什么作用?

    看到别人写的Shell脚本中有 make -j8 等字眼,Google了一下,网友说是: make linux kernel/rootfs时候多线程执行.

  6. Delphi Delay 延时计数的功能。 下面的方法都是思路,但是没有用在项目上

    procedure Tfrm_InstrumentControl.aa;var CurLength: Word; vTimeLength: Word;begin Screen.Cursor := cr ...

  7. 请用心练完这16个webpack小例子

    16个demo,webpack+react搭配使用首先教大家2个新技能 1.按照正常github地址情况下,你的github本身不能访问目录. 例如要访问vue-demo下的vueCpu文件夹:htt ...

  8. 使用apt-mirror建立局域网内的Debian/Ubuntu源镜像

    转:http://forum.ubuntu.org.cn/viewtopic.php?t=41791 第一次翻译,翻译得不好还请大家见谅,多多指出错误~!:) 原文可以见如下的贴子:http://fo ...

  9. 在Windows平台下安装与配置Memcached及C#使用方法

    1.在Windows下安装Memcached 资料来源:http://www.jb51.net/article/30334.htm 在Windows平台下安装与配置Memcached的方法,Memca ...

  10. 利用“进程注入”实现无文件复活 WebShell

    引子 上周末,一个好兄弟找我说一个很重要的目标shell丢了,这个shell之前是通过一个S2代码执行的漏洞拿到的,现在漏洞还在,不过web目录全部不可写,问我有没有办法搞个webshell继续做内网 ...