文档章节

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

酷呐么踏踏
 酷呐么踏踏
发布于 2017/08/08 11:26
字数 599
阅读 17
收藏 0

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


 

© 著作权归作者所有

下一篇: 点名系统
酷呐么踏踏

酷呐么踏踏

粉丝 3
博文 56
码字总数 29364
作品 0
太原
程序员
私信 提问
NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

整体博文已迁移到博客园:http://www.cnblogs.com/csqb-511612371/p/4891492.html 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们...

彩色铅笔
2014/07/18
3.5K
0
架构实现利器:反射

版权声明:本文由韩伟原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/246 来源:腾云阁 https://www.qcloud.com/community 作者介绍:韩伟,1999年大学...

偶素浅小浅
2016/12/10
11
0
第三天:XML&反射

一、XML 1 什么是XML XML全称为Extensible Markup Language,意思是可扩展的标记语言。XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的 2、应用常见 <1...

孤魂1996
2017/10/27
0
0
java 利用反射 为类的各个字段动态设置相应值

我用XmlPullParser解析XML,定义了一个Student类,类成员对应xml中的标签,我用反射获取Studen类中的所有字段,并为每个字段set值为xml中的Parser.nextText()的值 Field[] fields = student.g...

当空皓月
2014/01/15
1K
4
Hibernate如何实现映射?

映射类(.java):描述数据库表结构(表中的字段被描述成属性); 映射文件(.hbm.xml):指定数据库表和映射类直接的关系(映射类和数据库表对应关系,字段与属性的对应关系,表字段和类属性...

hanzhankang
2014/02/09
117
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
6
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部