Android XML转成对象Object,只需一行代码

本文介绍了一种简便的方法来将XML数据解析为Java对象。通过封装Pull解析器,仅需一行代码即可完成从XML到Java对象的转换,极大地简化了开发流程。

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

网上对于XML的数据解析眼花缭乱,用起来也不方便,今天正好有时间封装了下,基于pull解析,只需一行代码即可实现XML转换Object


Parser接口


import java.io.InputStream;

/**
 * Created by zhao on 2017/4/8.
 */

public interface Parser<T> {
    /**
     * 解析输入流 得到对象
     * @param is
     * @return
     * @throws Exception
     */
     T parse(InputStream is,Class<T> c) throws Exception;

    /**
     * 序列化对象 得到XML形式的字符串
     * @param t
     * @return
     * @throws Exception
     */
     String serialize(T t) throws Exception;
}


Parser实现,这里Object转XML没有做实现,待更新,有兴趣的小伙伴也可以自己实现下

import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import java.io.InputStream;
import java.lang.reflect.Field;

/**
 * Created by zhao on 2017/4/8.
 */

public class PullParser<T> implements Parser<T> {

    @Override
    public T parse(InputStream in,Class<T> c) throws Exception {
         T t = c.newInstance();
        Class weaClass = t.getClass();
        Field[] fs = weaClass.getDeclaredFields();
        XmlPullParser parser = Xml.newPullParser(); //由android.util.Xml创建一个XmlPullParser实例
        parser.setInput(in, "UTF-8");               //设置输入流 并指明编码方式
        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            switch (eventType) {
                case XmlPullParser.START_DOCUMENT:

                    break;
                case XmlPullParser.START_TAG:
                    for(int i = 0 ; i < fs.length; i++){
                        Field f = fs[i];
                        f.setAccessible(true); //设置些属性是可以访问的
                        if (parser.getName().equals(fs[i].getName())) {
                            eventType = parser.next();
                            f.set(t,parser.getText());
                            break;
                        }
                    }
                    break;
                case XmlPullParser.END_TAG:

                    break;
            }
            eventType = parser.next();
        }
        return t;
    }

    @Override
    public String serialize(T t) throws Exception {
        return null;
    }
}


面向开发者的Xml2Obj

import java.io.ByteArrayInputStream;

/**
 * Created by zhao on 2017/4/21.
 */

public class Xml2Obj {

    public static <T> T fromXml(String xml,Class<T> c) throws Exception {

            return new PullParser<T>().parse(new ByteArrayInputStream(xml.getBytes("UTF-8")),c);

    }

}


最后实现xml转object只需要这么一行代码,把Objcet替换成相应的实体即可

Objcet obj = Xml2Obj.fromXml(response.toString(),Objcet.class);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值