Android Pull 读取XML

本文详细介绍了如何使用XMLPull库实现XML文件的读取和写入操作,包括解析XML文档并创建Person对象列表,以及将Person对象列表转换回XML格式的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.wentian.service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

import com.wentian.bean.Person;

public class XmlService {
    public static List<Person> read(File file){
        List<Person> persons = null;
        Person p = null;
        
        try {
            FileInputStream inputStream = new FileInputStream(file);
            XmlPullParser parser = Xml.newPullParser();
            parser.setInput(inputStream, "utf-8");
            
            int type = parser.getEventType();
            while(type != XmlPullParser.END_DOCUMENT){
                switch (type) {
                case XmlPullParser.START_DOCUMENT:
                    persons = new ArrayList<Person>();
                    break;
                case XmlPullParser.START_TAG:
                    String name = parser.getName();
                    if(name.equals("person")){
                        p = new Person();
                        p.setId(Integer.parseInt(parser.getAttributeValue(0)));
                    }
                    else if(name.equals("name")){
                        p.setName(parser.nextText());
                    }
                    else if(name.equals("age")){
                        p.setAge(Short.parseShort(parser.nextText()));
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if(parser.getName().equals("person")){
                        persons.add(p);
                        p = null;
                    }
                    break;
                /*case XmlPullParser.END_DOCUMENT:
                    inputStream.close();
                    return persons;*/
                }
                
                type = parser.next();
            }
            inputStream.close();
            return persons;
            
        }
        catch (Exception e) {
            //Log.e("XmlService", e.toString());
        }
        
        
        return null;
    }
        
    public static boolean write(List<Person> persons,File file) {
        XmlSerializer serializer = Xml.newSerializer();
        try {
            serializer.setOutput(new FileWriter(file));
            serializer.startDocument("UTF-8", true);
          //第一个参数为命名空间,如果不使用命名空间,可以设置为null
            serializer.startTag("", "persons");
            for (Person person : persons){
                serializer.startTag("", "person");
                serializer.attribute("", "id", String.valueOf(person.getId()));
                serializer.startTag("", "name");
                serializer.text(person.getName());
                serializer.endTag("", "name");
                serializer.startTag("", "age");
                serializer.text(String.valueOf(person.getAge()));
                serializer.endTag("", "age");
                serializer.endTag("", "person");
            }
            serializer.endTag("", "persons");
            serializer.endDocument();
            //return writer.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

}

转载于:https://www.cnblogs.com/liuwentian/p/3148595.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值