Android中XML文件的序列化生成与解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

首先,我把Person的实体类

package net.loonggg.test;  
  
public class Person {  
    private int id;  
    private String age;  
    private String name;  
    private String sex;  
    private String address;  
  
    public int getId() {  
        return id;  
    }  
  
    public void setId(int id) {  
        this.id = id;  
    }  
  
    public String getAge() {  
        return age;  
    }  
  
    public void setAge(String age) {  
        this.age = age;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getSex() {  
        return sex;  
    }  
  
    public void setSex(String sex) {  
        this.sex = sex;  
    }  
  
    public String getAddress() {  
        return address;  
    }  
  
    public void setAddress(String address) {  
        this.address = address;  
    }  
  
    @Override  
    public String toString() {  
        return "Person [id=" + id + ", age=" + age + ", name=" + name  
                + ", sex=" + sex + ", address=" + address + "]";  
    }  
  
}  
其次:生成xml文件的方法如下:

/** 
     * 生成xml 
     */  
    private void createXml() {  
        XmlSerializer serializer = Xml.newSerializer();// xml文件生成器  
        File file = new File(Environment.getExternalStorageDirectory(),  
                "person.xml");  
        FileOutputStream fos = null;  
        try {  
            fos = new FileOutputStream(file);  
            serializer.setOutput(fos, "utf-8");// 为xml生成器设置输出流和字符编码  
            serializer.startDocument("utf-8", true);// 开始文档,参数分别为字符编码和是否保持独立  
            serializer.startTag(null, "persons"); // 开始标签,参数分别为:命名空间和标签名  
            for (Person person : list) {  
  
                serializer.startTag(null, "person");  
                serializer.attribute(null, "id", person.getId() + "");  
  
                serializer.startTag(null, "name");// 开始标签  
                serializer.text(person.getName());// 文本内容  
                serializer.endTag(null, "name");// 结束标签  
  
                serializer.startTag(null, "sex");  
                serializer.text(person.getSex());  
                serializer.endTag(null, "sex");  
  
                serializer.startTag(null, "age");  
                serializer.text(person.getAge());  
                serializer.endTag(null, "age");  
  
                serializer.startTag(null, "address");  
                serializer.text(person.getAddress());  
                serializer.endTag(null, "address");  
  
                serializer.endTag(null, "person");  
  
            }  
            serializer.endTag(null, "persons");// 结束标签  
            serializer.endDocument();// 结束xml文档  
            Toast.makeText(getApplicationContext(), "生成成功!", Toast.LENGTH_SHORT);  
        } catch (Exception e) {  
            Toast.makeText(getApplicationContext(), "生成失败!", Toast.LENGTH_SHORT);  
            e.printStackTrace();  
        } finally {  
            try {  
                fos.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
  
    }  
然后是解析xml文件的方法:

/** 
     * 解析xml文件 
     */  
    private List<Person> pullXml() {  
        try {  
            File file = new File(Environment.getExternalStorageDirectory(),  
                    "person.xml");  
            FileInputStream fis = new FileInputStream(file);  
            List<Person> persons = null;  
            Person person = null;  
            XmlPullParser parser = Xml.newPullParser();// 获取xml解析器  
            parser.setInput(fis, "utf-8");// 参数分别为输入流和字符编码  
            int type = parser.getEventType();  
            while (type != XmlPullParser.END_DOCUMENT) {// 如果事件不等于文档结束事件就继续循环  
                switch (type) {  
                case XmlPullParser.START_TAG:  
                    if ("persons".equals(parser.getName())) {  
                        persons = new ArrayList<Person>();  
                    } else if ("person".equals(parser.getName())) {  
                        person = new Person();  
                        String id = parser.getAttributeValue(0);  
                        person.setId(Integer.parseInt(id));  
                    } else if ("name".equals(parser.getName())) {  
                        person.setName(parser.nextText());  
                    } else if ("sex".equals(parser.getName())) {  
                        person.setSex(parser.nextText());  
                    } else if ("address".equals(parser.getName())) {  
                        person.setAddress(parser.nextText());  
                    } else if ("age".equals(parser.getName())) {  
                        person.setAge(parser.nextText());  
                    }  
                    break;  
                case XmlPullParser.END_TAG:  
                    if ("person".equals(parser.getName())) {  
                        persons.add(person);  
                        person = null;  
                    }  
                    break;  
                }  
                type = parser.next();// 继续下一个事件  
            }  
            return persons;  
        } catch (NumberFormatException e) {  
            e.printStackTrace();  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (XmlPullParserException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return null;  
    }  
再次是MainActivity里调用的部分代码:

public class MainActivity extends Activity {  
    private Button btn_create = null;  
    private Button btn_pull = null;  
    private TextView tv_show;  
    private List<Person> list = null;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        btn_create = (Button) findViewById(R.id.createXml);  
        btn_pull = (Button) findViewById(R.id.pullXml);  
        tv_show = (TextView) findViewById(R.id.tvShow);  
        list = new ArrayList<Person>();  
        for (int i = 0; i < 5; i++) {  
            Person person = new Person();  
            person.setAge(i + 20 + "");  
            person.setId(i);  
            person.setName("loonggg" + i);  
            person.setSex("男");  
            person.setAddress("中南海" + i + 1 + "大街");  
            list.add(person);  
        }  
        btn_create.setOnClickListener(new View.OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
                createXml();  
            }  
        });  
  
        btn_pull.setOnClickListener(new View.OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
                tv_show.setText(pullXml().toString());  
            }  
        });  
    }  
}  





目录
相关文章
|
13天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
43 2
|
2月前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
348 60
|
19天前
|
存储
文件太大不能拷贝到U盘怎么办?实用解决方案全解析
当我们试图将一个大文件拷贝到U盘时,却突然跳出提示“对于目标文件系统目标文件过大”。这种情况让人感到迷茫,尤其是在急需备份或传输数据的时候。那么,文件太大为什么会无法拷贝到U盘?又该如何解决?本文将详细分析这背后的原因,并提供几个实用的方法,帮助你顺利将文件传输到U盘。
|
2月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
2月前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
2月前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
28天前
|
安全 5G Android开发
安卓与iOS的较量:技术深度解析
【10月更文挑战第24天】 在移动操作系统领域,安卓和iOS无疑是两大巨头。本文将深入探讨这两个系统的技术特点、优势和不足,以及它们在未来可能的发展方向。我们将通过对比分析,帮助读者更好地理解这两个系统的本质和内涵,从而引发对移动操作系统未来发展的深思。
42 0
|
2月前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
82 0
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
70 0
|
2月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
57 0

推荐镜像

更多