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. PHP的Trait

    PHP的Trait Trait是在PHP5.4中加入的,它既不是接口也不是类.主要是为了解决单继承语言的限制.是PHP多重继承的一种解决方案.例如,需要同时继承两个 Abstract Class, 这 ...

  2. 山东省第六届省赛 H题:Square Number

    Description In mathematics, a square number is an integer that is the square of an integer. In other ...

  3. Scala 实现快速排序和归并排序

    def quickSort1(array: Array[Int]): Array[Int] = { def swap(x: Int, y: Int): Unit = { val tmp = array ...

  4. 26、Django实战第26天:配置全局导航

    1.编辑index.html,继承base.html 2.编辑base.html,根据是否登录不同显示 问题:当我们选中一个导航,选中样式并没有成为选中的状态 因此我们编辑base.html对导航中进 ...

  5. RPD Volume 172 Issue 1-3 December 2016 评论03

    Using Stable Free Radicals to Obtain Unique and Clinically Useful Data In Vivo in Human Subjects Abs ...

  6. hexo 的错误

    错误如下 Connection to github.com closed by remote host. fatal: The remote end hung up unexpectedly erro ...

  7. 子域名/目录暴力工具Gobuster

    子域名/目录暴力工具Gobuster   Gobuster是Kali Linux默认安装的一款暴力扫描工具.它是使用Go语言编写的命令行工具,具备优异的执行效率和并发性能.该工具支持对子域名和Web目 ...

  8. ubuntu 进入 pycharm(社区版)

    先进入到pycharm所在的目录,然后进入bin 然后./pycharm.sh 例如,我把pycharm 放在桌面上 su ➜ xushukui cd '/home/xushukui/桌面/pycha ...

  9. 【动态规划】bzoj1638 [Usaco2007 Mar]Cow Traffic 奶牛交通

    设f[u]为从度数0到u的路径条数,f2[u]为从u到n的路径条数. ans=max{f[x[i]]*f2[y[i]]}(1<=i<=m). #include<cstdio> ...

  10. 详细User-Agent大全

    目录: Android: Android 0.* Android 1.* Android 2.* Android 3.* Android 4.* Windows Phone OS BlackBerry ...