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/ ...
随机推荐
- mysql having的用法
having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前.而 having子句在聚合后对组记录进行筛选. ...
- HDU 1754.I Hate It-结构体版线段树(单点更新+区间查询最值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 2016noipday1t1玩具迷题结题报告
经常读这个代码有益于比赛时想起一些思路.... day1t1,洛谷dalao称之为水题...??然后我去年还是没拿到分,就这个,我还就写了40%的数据,AC到40,然而这不是关键,注释了freopen ...
- 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, ...
- 【线性筛】【筛法求素数】【素数判定】URAL - 2102 - Michael and Cryptography
暴力搞肯定不行,因此我们从小到大枚举素数,用n去试除,每次除尽,如果已经超过20,肯定是no.如果当前枚举到的素数的(20-已经找到的质因子个数)次方>剩下的n,肯定也是no.再加一个关键的优化 ...
- 【匈牙利算法模板】BZOJ1191-超级英雄
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...
- Activity组件(传递数据)
(一) 1.效果图:点击按钮“调用第二个Activity”,转到第二页面,之后点击“返回数据”,将第二个页面的数据传到第一个页面 2. activity_main.xml <?x ...
- Word中插入带公式的Visio注意事项
有时候发现,有的公式显示的间距特别大,那么在word中右键打开Visio,改好后,保存了,word里还是那样. 因为你需要吧改好的另存为原来的visio文件(名字.位置要一样,就是说替换原来的文件), ...
- Visual Studio 版本互转工具
Visual Studio 版本互转工具 http://www.cnblogs.com/flydoos/archive/2011/08/20/2146121.html http://www.cnblo ...
- Android Studio使用过程中Java类突然报红,但项目可运行解决方案
1.点击File->Invalidate Caches / Restart... 2.重启Gradle,清除缓存 3.Clean Project