博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计自己解析XML字段,并反射到对应类
阅读量:7193 次
发布时间:2019-06-29

本文共 5570 字,大约阅读时间需要 18 分钟。

hot3.png

//主题XmlToObject类 带测试方法

package com.sram.work;import java.lang.reflect.Field;import java.lang.reflect.Method;import com.sram.beans.Book;import com.sram.beans.User;public class XmlToObject {    public static void main(String[] args) throws Exception {        String str1 = "
天龙八部
金庸
12.0
人民日报出版社
未出借
";//字段1        Object obj1 = XmlToObject.xml2Object(str1, Book.class);        System.out.println(obj1);        String str = "
路飞
123
12
M
";//字段2        Object obj = XmlToObject.xml2Object(str, User.class);        System.out.println(obj);    }//解析字符串,将字符串反射到对应类中属性    public static Object xml2Object(String xml, Class
c) throws Exception {        Object obj = c.newInstance();// Object obj = new User();        Field[] fields = c.getDeclaredFields();//反射获取属性        for (Field field : fields) {            String fieldValue = getValue(xml, field);            String methodName = "set"                    + field.getName().substring(0, 1).toUpperCase()                    + field.getName().substring(1);            Method method = c.getMethod(methodName, field.getType());//反射获取方法            if (field.getType().getSimpleName().equals("String")                    && fieldValue != "")                method.invoke(obj, fieldValue);            if (field.getType().getSimpleName().equals("int")                    && fieldValue != "")                method.invoke(obj, Integer.parseInt(fieldValue));            if (field.getType().getSimpleName().equals("char")                    && fieldValue != "") {                char[] temp = fieldValue.toCharArray();                method.invoke(obj, temp[0]);            }            if (field.getType().getSimpleName().equals("double")                    && fieldValue != "")                method.invoke(obj, Double.parseDouble(fieldValue));        }        return obj;    }//分割字符串    public static String getValue(String xml, Field field) {        String sb = "<" + field.getName() + ">";        String se = "
";        int begin = xml.indexOf(sb) + field.getName().length() + 2;        int end = xml.indexOf(se);        String value = "";        if (begin < end)            value = xml.substring(begin, end);        return value;    }}

//反射Book类

package com.sram.beans;public class Book {    private String name;// 书名    private String author;// 作者    private double price;// 价格    private String cbs;// 出版社    private String state;// 状态    @Override    public String toString() {        return " 图书名称=" + name + ", 作者=" + author + ", 价格=" + price + ", 出版社="                + cbs + ", 状态=" + state;    }    public Book() {        super();        // TODO Auto-generated constructor stub    }    public Book(String name, String author, double price, String cbs,            String state) {        super();        this.name = name;        this.author = author;        this.price = price;        this.cbs = cbs;        this.state = state;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getAuthor() {        return author;    }    public void setAuthor(String author) {        this.author = author;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public String getCbs() {        return cbs;    }    public void setCbs(String cbs) {        this.cbs = cbs;    }    public String getState() {        return state;    }    public void setState(String state) {        this.state = state;    }}

//反射User类 

package com.sram.beans;public class User {    private String username;    private String password;    private int age;    private char sex;    public User() {        super();    }    @SuppressWarnings("unused")    private User(String username) {        super();        this.username = username;    }    public User(String username, String password) {        super();        this.username = username;        this.password = password;    }    @SuppressWarnings("unused")    private User(String username, String password, int age) {        super();        this.username = username;        this.password = password;        this.age = age;    }    private User(String username, String password, int age, char sex) {        super();        this.username = username;        this.password = password;        this.age = age;        this.sex = sex;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    @Override    public String toString() {        return "User [username=" + username + ", password=" + password                + ", age=" + age + ", sex=" + sex + "]";    }    public char getSex() {        return sex;    }    public void setSex(char sex) {        this.sex = sex;    }    public void setPassword(String password) {        this.password = password;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @SuppressWarnings("unused")    private void method() {        System.out.println("method方法");    }    public void fun() {        System.out.println("fun方法");    }    public int add(int a, int b) {        return a + b;    }    public static void update() {        System.out.println("静态方法");    }}

 

转载于:https://my.oschina.net/869088067/blog/1504419

你可能感兴趣的文章
公用技术——设计模式9——结构型模式——桥接模式——待补充1
查看>>
percona-toolkit工具包的安装和使用
查看>>
P1059 明明的随机数【去重排序】
查看>>
广东工业大学2017新生赛(决赛)网络同步赛题解
查看>>
synchoronized和lock区别
查看>>
字节流、字符串、16进制字符串转换__java
查看>>
送给连里和班里那些亲儿们(终结)
查看>>
随笔2
查看>>
Halcon算子翻译——read_measure
查看>>
mbp安装mysql
查看>>
LAMMPS-special bonds
查看>>
双等位基因(biallelic sites )和多等位基因(multiallelic sites)
查看>>
音视频技术发展-数字电视
查看>>
Max Tree
查看>>
Backpack
查看>>
Go语言(Golang)插入排序
查看>>
CSDN博客栏目设置个性化
查看>>
java_servlet字符过滤器filter
查看>>
架构设计之设计模式 (四) Java中多种方式实现单例模式
查看>>
WebPart自定义属性及SharePoint列表操作
查看>>