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());
            }
        });
    }
}  
时间: 2024-10-25 00:52:43

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

android中XMl文件的读取

废话不多说了直接上代码: 新建一个Xml文件用于读取: test.xml <Languages cat="1"> <lan id="1"> <name>java</name> <ide>Eclipse</ide> </lan> <lan id="2"> <name>Swift</name> <ide>Xcode<

【Android】利用表格布局,Android中xml文件与java的交互制作登录界面

登录界面是图形编程.网页编程的一个经典而又基础的程序. 在安卓中,如图所示一个基本登录界面: 点击取消按钮就关闭这个程序,点击登录按钮则显示用户输入的用户名与密码. 一.基本布局 这个程序利用到安卓中的表格布局. 先打开res/values/strings.xml中定义几个字符串.之所以不直接把字符串直接写在activity_main.xml的组件中,是因为免得Eclipse出现警告.这个文件的代码如下: <?xml version="1.0" encoding="ut

怎么在android的XML文件中添加注释

android的XML文件注释一般采用 <!--注释内容 -->的方式进行 在XML中,形如    <Button           />      的表示方式,其中"/>"的含义表示这个XML中没有内文,他是一个最小组成单元,也就是说他的中间不能包含其他任何< >的代码,所以在<Button />中间注释会出现错误 注意看到,在注释的前面有一个">"符号,这就是我们能够在他中间进行注释的原因,他的完整结

Android Button Maker(在线生成android shape xml文件的工具),真方便!

直接上地址:http://angrytools.com/android/button/ 使用起来超简单,如图: Android Button Maker is online tool to generate buttons code for Android Apps. Android API provide Drawable Resources where XML file defines geometric shape, including colors, border and gradien

Android中XML数据解析

转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的.结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD定义了文

Android修改XML文件

最近在项目中需要使用XML记录数据,网上这方面的文章较少,记录一下 使用DOM方式 [java] view plaincopy /** * 追加内容到XML文档 * @param instructions * @throws ParserConfigurationException * @throws SAXException * @throws IOException * @throws TransformerException */ public void append2XML(String

在android中读写文件

在android中读写文件 android中只有一个盘,正斜杠/代表根目录. 我们常见的SDK的位置为:/mnt/sdcard 两种最常见的数据存储方式: 一.内存 二.本地 1.手机内部存储 2.外部存储设备(SD卡) 在SD卡中读数据是不需要权限的,但是在SD卡中写数据是要权限的: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 读写文件的方式就是用的Java的文件

Swing结合dom以及拖拽的Android Layout xml文件处理器

无聊之作,只是从布局文件中提取出定义了android:id属性的控件名称,方便在编写class文件的时候能够跟layout文件保持一致. 原理很简单,直接上代码: 1.swing主界面代码 1 package com.zhyy.layoutparser; 2 3 import javax.swing.*; 4 import java.awt.*; 5 import java.awt.datatransfer.Clipboard; 6 import java.awt.datatransfer.St

android 中Xml里面的id重名问题

情况一:同个一个Xml文件中的同名 在同个一个Xml文件的中若同名了,则前一个有效,而后一个无效 情况二:在不同的Xml 文件中的同名 在不同Xml文件的Id若同名了,两者都有效的. 当android的工程越来越大.xml文件越来越多时,避免不了两个xml文件中同 样的组件使用同样的id名字,gen目录下的R.java文件中,有关id的声明都在id的class中,即public static final class id{}:当两个xml文件中同样的组件,比如Button,有可能很多个文件中,都