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>

更多相关文章

  1. android 实现左右滑动效果
  2. Android的Recovery中font_10x10.h字库文件制作
  3. android R cannot be resolved to a variable
  4. Android+Jquery Mobile学习系列(5)-SQLite数据库
  5. Android(安卓)APK反编译详解
  6. Android菜鸟笔记3-Activity切换
  7. Android移动终端数据同步技术的一次了解
  8. Android(安卓)Spinner
  9. APEX - Android(安卓)Q

随机推荐

  1. Javascript setTimeout 带参数延迟执行
  2. Node.js和webcrypto之间的RSA加密
  3. javascript相关小内容
  4. 将jQuery datepicker应用到多个实例
  5. 常见的面试题
  6. 是什么导致Meteor中的“模板未定义”?
  7. adobeindesign JavaScript XML:如何以编
  8. 从文本框值生成条形码图像
  9. 谷歌地图在角度指令中不起作用
  10. js金额数字格式化实现代码(三位加逗号处