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

简介:

首先,我把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());  
            }  
        });  
    }  
}  





目录
相关文章
|
4天前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
16 1
|
24天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
52 1
|
2月前
|
Android开发
安卓SO层开发 -- 编译指定平台的SO文件
安卓SO层开发 -- 编译指定平台的SO文件
32 0
|
3月前
|
存储 算法 安全
AVB数据解析:Android verified boot 2.0 vbmeta 数据结构解析
AVB数据解析:Android verified boot 2.0 vbmeta 数据结构解析
143 0
|
3天前
|
存储 Java API
Android系统 文件访问权限笔记
Android系统 文件访问权限笔记
35 1
|
3天前
|
移动开发 Java Unix
Android系统 自动加载自定义JAR文件
Android系统 自动加载自定义JAR文件
21 1
|
4天前
|
Android开发
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
2 0
|
1月前
|
XML 存储 BI
如何把一个 ABAP 类的实例,序列化成 XML 字符串试读版
如何把一个 ABAP 类的实例,序列化成 XML 字符串试读版
13 0
|
1月前
|
编译器 开发工具 Android开发
Android 12 新特性深度解析
【2月更文挑战第15天】 随着移动操作系统的不断进化,Android 12带来了一系列创新功能与性能提升。本文将深入剖析Android 12的核心新特性,包括隐私仪表盘、通知管理、设备控制以及性能优化等方面,为开发者和用户提供全面的更新指南。
|
2月前
|
JSON Java Go

推荐镜像

更多