android解析XML      ---------------------------基础要像磐石

在android平台上可以使用SAX、DOM和自带的Pull解析器解析xml文件,本文主要介绍使用pull方式解析xml。pull解析器的运行方式和SAX解析器相似,他也有开始元素和结束元素事件,并且可以循环解析。可以使用nextText()方法获取Text类型元素的值。

//如果涉及某些存储操作,需要添加Users权限

下面是将要解析的XML文件,将此xml文件存放在assets目录下。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <info city='3'>
  3. <name>深圳</name>
  4. <temp>28℃</temp>
  5. <weather>多云</weather>
  6. <msg>天气适宜, 穿个比基尼!</msg>
  7. </info>

创建一个javabean来存放解析出来的数据,创建类WeatherInfo,如下

  1. public class WeatherInfo {
  2. private String name;
  3. private String temp;
  4. private String weather;
  5. private String msg;
  6. public String getName() {
  7. return name;
  8. }
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12. public String getTemp() {
  13. return temp;
  14. }
  15. public void setTemp(String temp) {
  16. this.temp = temp;
  17. }
  18. public String getWeather() {
  19. return weather;
  20. }
  21. public void setWeather(String weather) {
  22. this.weather = weather;
  23. }
  24. public String getMsg() {
  25. return msg;
  26. }
  27. public void setMsg(String msg) {
  28. this.msg = msg;
  29. }
  30. @Override
  31. public String toString() {
  32. return "[name=" + name + ", temp=" + temp + ", weather="
  33. + weather + ", msg=" + msg + "]";
  34. }
  35.  
  36. }

下面开始解析

  1. //Context上下文,保存当前应用程序,系统资源和配置etc
  2. AssetManager am=this.getAssets();
  3.  
  4. try {
  5. InputStream is=am.open("weather.xml");
  6. //1,创建xml解析器
  7. XmlPullParser parser=Xml.newPullParser();
  8. //2,初始化解析器,设置要解析的流数据,并设置编码方式
  9. parser.setInput(is,"utf-8");
  10. //3,循环解析
  11. int type=parser.getEventType();
  12.  
  13. WeatherInfo info=new WeatherInfo();
  14. while(type!=XmlPullParser.END_DOCUMENT){
  15. //如果是开始标签
  16. if(type==XmlPullParser.START_TAG){
  17. if("name".equals(parser.getName())){
  18. String name=parser.nextText();//获取文本数据
  19. info.setName(name);
  20. }else if("temp".equals(parser.getName())){
  21. info.setTemp(parser.nextText());
  22. }else if("weather".equals(parser.getName())){
  23. info.setWeather(parser.nextText());
  24. }else if("msg".equals(parser.getName())){
  25. info.setMsg(parser.nextText());
  26. }
  27. }
  28. //让解析器移动到下一个
  29. type=parser.next();
  30. //关闭流
  31. is.close();
  1. tv_weather.setText(info.toString());
  2. }
  3. } catch (Exception e) {
  4. // TODO Auto-generated catch block
  5. e.printStackTrace();
  6. }

Pull解析器的工作方式为允许应用程序代码主动从解析器中获取事件,正因为是主动获取事件,因此可以随时跳出。

---------------------------------------------------我是快乐的分割线--------------------------------------------------

序列化就是把对象转换成易于传输的形式。反序列化是在流中重新构建对象 XML序列化只将对象的公共字段和属性值序列化为XML流。

XML序列化不能转换方法、索引器、私有字段或只读属性(只读集合除外)。

XML序列化的核心是 XmlSerializer类

步骤:

1,设置生成xml文件位置

2,创建xml序列化器,并创建输出流

3,写数据。(可以使用循环,这样就不那么蛋疼了)

4,最后,千万不要忘记关闭流!!!千万不要忘记关闭流!!!千万不要忘记关闭流!!!

  1.     //设置生成的xml文件的位置在/data/data/包名/cache目录下
  2. String path = this.getCacheDir().getPath();
  3. File file = new File(path, "info.xml");
  4. //
  5. try {
  6. FileOutputStream fos = new FileOutputStream(file);
  7. // 1,创建XML序列化器
  8. XmlSerializer serializer = Xml.newSerializer();
  9. // 2,初始化序列化器,并设置输出流
  10. serializer.setOutput(fos, "utf-8");// fos 是导出的文件位置
  11.  
  12. // 3,写数据,下面是一个无聊且蛋疼的过程
  13. serializer.startDocument("utf-8", true);
  14. // 开始标签
  15. // Parameters:
  16. // namespace
  17. // name
  18. serializer.startTag(null, "info");
  19. serializer.startTag(null, "name");
  20. // 设置内容
  21. // Writes text, where special XML chars are escaped automatically
  22. serializer.text("深圳");
  23. serializer.endTag(null, "name");
  24.  
  25. serializer.startTag(null, "temp");
  26. serializer.text("33℃");
  27. serializer.endTag(null, "temp");
  28.  
  29. serializer.startTag(null, "weather");
  30. serializer.text("多云");
  31. serializer.endTag(null, "weather");
  32.  
  33. serializer.startTag(null, "msg");
  34. serializer.text("天气晴朗,出来看大腿啊!!!");
  35. serializer.endTag(null, "msg");
  36.  
  37. // 结束标签
  38. serializer.endTag(null, "info");
  39.  
  40. serializer.endDocument();
  41.  
  42. // 不要忘记关闭流
  43. // 不要忘记关闭流
  44. // 不要忘记关闭流,重要的事情说三遍
  45. fos.close();
  46. Toast.makeText(getApplicationContext(), "成功", 0).show();
  47. } catch (Exception e) {
  48. e.printStackTrace();
  49. }

序列化生成的XML文件如下

  1. <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
  2. <info>
  3. <name>深圳</name>
  4. <temp>33℃</temp>
  5. <weather>多云</weather>
  6. <msg>天气晴朗,出来看大腿啊!!!</msg>
  7. </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. mysql having的用法

    having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前.而 having子句在聚合后对组记录进行筛选. ...

  2. HDU 1754.I Hate It-结构体版线段树(单点更新+区间查询最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  3. 2016noipday1t1玩具迷题结题报告

    经常读这个代码有益于比赛时想起一些思路.... day1t1,洛谷dalao称之为水题...??然后我去年还是没拿到分,就这个,我还就写了40%的数据,AC到40,然而这不是关键,注释了freopen ...

  4. Verify Preorder Serialization of a Binary Tree -- LeetCode

    One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null node, ...

  5. 【线性筛】【筛法求素数】【素数判定】URAL - 2102 - Michael and Cryptography

    暴力搞肯定不行,因此我们从小到大枚举素数,用n去试除,每次除尽,如果已经超过20,肯定是no.如果当前枚举到的素数的(20-已经找到的质因子个数)次方>剩下的n,肯定也是no.再加一个关键的优化 ...

  6. 【匈牙利算法模板】BZOJ1191-超级英雄

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...

  7. Activity组件(传递数据)

    (一) 1.效果图:点击按钮“调用第二个Activity”,转到第二页面,之后点击“返回数据”,将第二个页面的数据传到第一个页面         2. activity_main.xml <?x ...

  8. Word中插入带公式的Visio注意事项

    有时候发现,有的公式显示的间距特别大,那么在word中右键打开Visio,改好后,保存了,word里还是那样. 因为你需要吧改好的另存为原来的visio文件(名字.位置要一样,就是说替换原来的文件), ...

  9. Visual Studio 版本互转工具

    Visual Studio 版本互转工具 http://www.cnblogs.com/flydoos/archive/2011/08/20/2146121.html http://www.cnblo ...

  10. Android Studio使用过程中Java类突然报红,但项目可运行解决方案

    1.点击File->Invalidate Caches / Restart... 2.重启Gradle,清除缓存 3.Clean Project