设计自己解析XML字段,并反射到对应类

原创
2017/08/08 11:26
阅读数 207

//主题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 = "<Book><name>天龙八部</name><author>金庸</author><price>12.0</price><cbs>人民日报出版社</cbs><state>未出借</state></Book>";//字段1
        Object obj1 = XmlToObject.xml2Object(str1, Book.class);
        System.out.println(obj1);
        String str = "<User><username>路飞</username><password>123</password><age>12</age><sex>M</sex></User>";//字段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 = "</" + field.getName() + ">";

        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("静态方法");
    }
}


 

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部