微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

//主题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,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://www.jb51.cc/xml/293942.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。