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());  
            }  
        });  
    }  
}  





目录
相关文章
|
16天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
22天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
51 1
|
29天前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
1月前
|
安全 Java 数据库连接
jdbc解析excel文件,批量插入数据至库中
jdbc解析excel文件,批量插入数据至库中
21 0
|
2天前
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
13 0
|
5天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
14 1
|
1月前
|
SQL Java 数据库连接
springboot解析txt文件顺便加到数据库中(nohup文件)
springboot解析txt文件顺便加到数据库中(nohup文件)
112 1
|
1月前
|
XML Java 数据格式
使用java解析XML文件的步骤
使用java解析XML文件的步骤
10 0
|
1月前
|
存储 安全 Linux
C++文件格式深度解析:从底层结构到关键特性
C++文件格式深度解析:从底层结构到关键特性
250 3
C++文件格式深度解析:从底层结构到关键特性
|
1月前
|
JavaScript 前端开发 编译器
Cmake 中 compiler_depend.ts 文件:解析和使用 C/C++ 预编译头文件
Cmake 中 compiler_depend.ts 文件:解析和使用 C/C++ 预编译头文件
22 1

推荐镜像

更多