【Android】XmlPullParser及XmlSerializer的使用

直接上代码:

public class PersonService {
    /**
     * 接收一个包含XML文件的输入流, 解析出XML中的Person对象, 装入一个List返回
     *
     * @param in 包含XML数据的输入流
     * @return 包含Person对象的List集合
     */
    public static List<Person> getPersons(InputStream in) throws Exception {
        //1.获取xml文件方法
        //InputStream is = PersonService.class.getClassLoader().getResourceAsStream();
        //2.获取解析器(Android中提供了方便的方法就是使用Android中的工具类Xml)
        XmlPullParser parser = Xml.newPullParser();
        //3.解析器解析xml文件
        parser.setInput(in, "UTF-8");

        List<Person> persons = new ArrayList<>();
        Person person = null;
        //4.循环解析
        for (int type = parser.getEventType(); type != XmlPullParser.END_DOCUMENT; type = parser.next()) {    // 循环解析
            if (type == XmlPullParser.START_TAG) {                // 判断如果遇到开始标签事件
                if ("person".equals(parser.getName())) {        // 标签名为person
                    person = new Person();                            // 创建Person对象
                    String id = parser.getAttributeValue(0);    // 获取属性
                    person.setId(Integer.parseInt(id));                // 设置ID
                    persons.add(person);                                // 把Person对象装入集合
                } else if ("name".equals(parser.getName())) {    // 标签名为name
                    String name = parser.nextText();            // 获取下一个文本
                    person.setName(name);                            // 设置name
                } else if ("age".equals(parser.getName())) {    // 标签名为age
                    String age = parser.nextText();                // 获取下一个文本
                    person.setAge(Integer.parseInt(age));            // 设置age
                }
            }
        }
        return persons;
    }

    /**
     * 将数据写入到Xml文件中.
     *
     * @param out 输出到要被写入数据的Xml文件的输出流//就相当于 OutputStream os = new FileOutputStream("a.xml");
     */
    public static void writePersons(List<Book> books, OutputStream out) throws Exception {

        //1.获得XmlSerializer(Xml序列化工具)(通过Android中的工具类Xml得到)
        XmlSerializer serializer = Xml.newSerializer();
        //2.设置输出流(明确要将数据写入那个xml文件中)
        serializer.setOutput(out, "UTF-8");
        //3.写入开始文档
        serializer.startDocument("UTF-8", true);
        //4.开始标签
        serializer.startTag(null, "bookstore");
        //5.循环遍历
        for (Book book : books) {
            //6.开始标签
            serializer.startTag(null, "book");
            //7.给这个标签设置属性
            serializer.attribute(null, "id", book.getId().toString());
            //8.子标签
            serializer.startTag(null, "name");
            //9.设置子标签的内容
            serializer.text(book.getName());
            //10.子标签结束
            serializer.endTag(null, "name");
            //11.标签结束
            serializer.endTag(null, "person");
        }
        //12.根标签结束
        serializer.endTag(null, "persons");
        //13.文档结束
        serializer.endDocument();
    }
}
public class Book {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public class Person {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值