没想到公司用的是xml方法进行数据交互

来源:互联网 发布:地图龟淘宝哪家的好 编辑:程序博客网 时间:2024/06/06 02:19

   接手一个新项目,拿到接口文档一看,一万个草泥马在心中飘过!与后台的数据交互方式竟然是xml数据,其实也没啥了,个人用json习惯了,做了那么多项目就没碰过用xml的,没办法,就是干!一开始自己也是傻逼了,竟然用Pull解析一个一个的将xml数据解析成实体类,一个实体类对应一个解析方法,也是醉了!好在及时醒悟,毕竟xml数据也是有规律的,于是封装了个万能的方法,只针对此项目的哈,在此做个记录:

   1.先看下数据形式:

 private String xmlString="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +            "<root><msgname>user/queryUserInfo</msgname><transactionid>1241241</transactionid>" +            "<timestamp></timestamp><result>000000</result><resultdesc>请求成功</resultdesc>" +            "<body><name>vitor</name><identitycardno>1234568797994564</identitycardno>" +            "<photo>adfsadfads</photo><birthdate>1990-12-26</birthdate><validdate>456</validdate><address>深圳</address><signorg>opsdf</signorg><nation>汉</nation>" +            "<sex></sex><mobile>15019297974</mobile><email>wuzq@qq.com</email><accountno>00118881000030200009</accountno>" +            "<isrealname>0</isrealname><username>wuzq</username><retcode>000000</retcode><retmsg></retmsg></body></root>";
   2.解析数据:

    (1)创建实体类:

public class UserInfo {    private String name;    private String identitycardno;    private String photo;    private String birthdate;    private String validdate;    private String address;    private String signorg;    private String nation;    private String sex;    private String mobile;    private String retcode;    private String retmsg;    private int isrealname;    private String accountno;    private String email;    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public String getAccountno() {        return accountno;    }    public void setAccountno(String accountno) {        this.accountno = accountno;    }    public int getIsrealname() {        return isrealname;    }    public void setIsrealname(int isrealname) {        this.isrealname = isrealname;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getIdentitycardno() {        return identitycardno;    }    public void setIdentitycardno(String identitycardno) {        this.identitycardno = identitycardno;    }    public String getPhoto() {        return photo;    }    public void setPhoto(String photo) {        this.photo = photo;    }    public String getBirthdate() {        return birthdate;    }    public void setBirthdate(String birthdate) {        this.birthdate = birthdate;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    public String getValiddate() {        return validdate;    }    public void setValiddate(String validdate) {        this.validdate = validdate;    }    public String getSignorg() {        return signorg;    }    public void setSignorg(String signorg) {        this.signorg = signorg;    }    public String getNation() {        return nation;    }    @Override    public String toString() {        return "UserInfo{" +                "name='" + name + '\'' +                ", identitycardno='" + identitycardno + '\'' +                ", photo='" + photo + '\'' +                ", birthdate='" + birthdate + '\'' +                ", validdate='" + validdate + '\'' +                ", address='" + address + '\'' +                ", signorg='" + signorg + '\'' +                ", nation='" + nation + '\'' +                ", sex='" + sex + '\'' +                ", mobile='" + mobile + '\'' +                ", retcode='" + retcode + '\'' +                ", retmsg='" + retmsg + '\'' +                ", isrealname=" + isrealname +                ", accountno='" + accountno + '\'' +                ", email='" + email + '\'' +                '}';    }    public void setNation(String nation) {        this.nation = nation;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public String getMobile() {        return mobile;    }    public void setMobile(String mobile) {        this.mobile = mobile;    }    public String getRetcode() {        return retcode;    }    public void setRetcode(String retcode) {        this.retcode = retcode;    }    public String getRetmsg() {        return retmsg;    }    public void setRetmsg(String retmsg) {        this.retmsg = retmsg;    }}

    (2)利用反射封装解析方法:

 public static <T>T xmlToObject(String xmlResult, Class<T> clz, String tagName){        XmlPullParser parser= Xml.newPullParser();        T t=null;        try {            parser.setInput(new ByteArrayInputStream(xmlResult.getBytes("UTF-8")),"UTF-8");            int eventType=parser.getEventType();            while (eventType!=XmlPullParser.END_DOCUMENT){                switch (eventType){                    case XmlPullParser.START_DOCUMENT:{                    }break;                    case XmlPullParser.START_TAG:{                        if (t != null) {                            try {                                Field field = clz.getDeclaredField(parser.getName());                                if (field != null) {                                    field.setAccessible(true);                                    String type = field.getType().getSimpleName();                                    if (type.contains("String")) {                                        field.set(t, parser.nextText());                                    } else if (type.contains("int")) {                                        field.set(t,Integer.valueOf(parser.nextText()));                                    } else if (type.contains("boolean")) {                                        field.set(t,Boolean.valueOf(parser.nextText()));                                    } else if (type.contains("float")) {                                        field.set(t,Float.valueOf(parser.nextText()));                                    } else if (type.contains("double")) {                                        field.set(t,Double.valueOf(parser.nextText()));                                    }else if (type.contains("long")) {                                        field.set(t,Long.valueOf(parser.nextText()));                                    }                                }                            } catch (Exception e) {                                e.printStackTrace();                            }                        }                        if (tagName.equals(parser.getName())){                            t=clz.newInstance();                        }                    }break;                    case XmlPullParser.END_TAG:{                    }break;                }                eventType=parser.next();            }            return t;        } catch (Exception e) {            e.printStackTrace();        }        return  null;    }

(3)查看demo

阅读全文
0 0
原创粉丝点击