dom4j将xml转换成对象

来源:互联网 发布:安卓编程用什么语言 编辑:程序博客网 时间:2024/05/22 10:30

dom4j将xml转换成对象

package test;import java.lang.reflect.Field;  import java.util.HashMap;  import java.util.List;  import java.util.Map;    import org.dom4j.Document;  import org.dom4j.DocumentHelper;  import org.dom4j.Element; import org.dom4j.tree.DefaultAttribute;public class XmlUtil {        /**      * xml字符串转换成bean对象      *       * @param xmlStr xml字符串      * @param clazzMap 待转换的class包括对象属性的class      * @return 转换后的对象      */      public static Object xmlStrToBean(String xmlStr,Map<String,Class>  clazzMap) {          Object obj = null;          try {              // 将xml格式的数据转换成Map对象             Map<String, Object> map = new HashMap<String, Object>();                 //将xml格式的字符串转换成Document对象                 Document doc = DocumentHelper.parseText(xmlStr);                 //获取根节点                 Element root = doc.getRootElement();                              //将map对象的数据转换成Bean对象                 obj = mapToBean(root, clazzMap);          } catch(Exception e) {              e.printStackTrace();          }          return obj;      }                         /**      * 将Map对象通过反射机制转换成Bean对象      *       * @param clazzMap 待转换的class包括对象属性的class      * @return 转换后的Bean对象      * @throws Exception 异常      */      public static Object mapToBean( Element root,Map<String,Class> clazzMap) throws Exception {      //获取根节点下的所有元素          List children = root.elements();        List<DefaultAttribute> attrs= root.attributes();           Map<String, Object> map = new HashMap<String, Object>();        if(children != null && children.size() > 0) {                 for(int i = 0; i < children.size(); i++) {                                Element child = (Element)children.get(i);                              if(!child.isTextOnly()){                                  Object ob= mapToBean(child,clazzMap);                    map.put(child.getName(),ob);                  }else{                  map.put(child.getName(), child.getTextTrim());                    }                                 }             }              for(DefaultAttribute att:attrs){       map.put(att.getName(),att.getText());         }           Class clazz=clazzMap.get(root.getName());           Object obj = clazz.newInstance();          if(map != null && map.size() > 0) {              for(Map.Entry<String, Object> entry : map.entrySet()) {                  String propertyName = entry.getKey();                  Object value = entry.getValue();                  String setMethodName = "set"                          + propertyName.substring(0, 1).toUpperCase()                          + propertyName.substring(1);                  Field field = getClassField(clazz, propertyName);                  Class fieldTypeClass = field.getType();                  value = convertValType(value, fieldTypeClass);                  clazz.getMethod(setMethodName, field.getType()).invoke(obj, value);              }          }          return obj;      }            /**      * 将Object类型的值,转换成bean对象属性里对应的类型值      *       * @param value Object对象值      * @param fieldTypeClass 属性的类型      * @return 转换后的值      */      private static Object convertValType(Object value, Class fieldTypeClass) {          Object retVal = null;          if(Long.class.getName().equals(fieldTypeClass.getName())                  || long.class.getName().equals(fieldTypeClass.getName())) {              retVal = Long.parseLong(value.toString());          } else if(Integer.class.getName().equals(fieldTypeClass.getName())                  || int.class.getName().equals(fieldTypeClass.getName())) {              retVal = Integer.parseInt(value.toString());          } else if(Float.class.getName().equals(fieldTypeClass.getName())                  || float.class.getName().equals(fieldTypeClass.getName())) {              retVal = Float.parseFloat(value.toString());          } else if(Double.class.getName().equals(fieldTypeClass.getName())                  || double.class.getName().equals(fieldTypeClass.getName())) {              retVal = Double.parseDouble(value.toString());          } else {              retVal = value;          }          return retVal;      }        /**      * 获取指定字段名称查找在class中的对应的Field对象(包括查找父类)      *       * @param clazz 指定的class      * @param fieldName 字段名称      * @return Field对象      */      private static Field getClassField(Class clazz, String fieldName) {          if( Object.class.getName().equals(clazz.getName())) {              return null;          }          Field []declaredFields = clazz.getDeclaredFields();          for (Field field : declaredFields) {              if (field.getName().equals(fieldName)) {                  return field;              }          }            Class superClass = clazz.getSuperclass();          if(superClass != null) {// 简单的递归一下              return getClassField(superClass, fieldName);          }          return null;      }           public static String getXML(){    StringBuffer sb=new StringBuffer();    sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");    sb.append("<note name=\"xian\">");    sb.append("<to>George</to>");    sb.append("<Student>");    sb.append("<name>xian</name>");    sb.append("<classRoom>");    sb.append("<name>Ap111111</name>");    sb.append("</classRoom>");    sb.append("<age>13</age>");    sb.append("</Student>");    sb.append("<from>John</from>");    sb.append("<heading>Reminder</heading>");    sb.append("<Body>Don't forget the meeting!</Body>");    sb.append("</note>");    return sb.toString();    }        public static void main(String[] args){      Map<String ,Class> mapClass=new HashMap<String,Class>();      mapClass.put("note", Note.class);      mapClass.put("Student", Student.class);      mapClass.put("classRoom", ClassRoom.class);      Note note=(Note)xmlStrToBean(getXML(),mapClass);      System.out.println(note.getName()+"--"+note.getTo()+"--"/*+note.getStudent().getAge()+note.getStudent().getClassRoom().getName()*/);    }}


package test;


public class Note {
public String to;
public String from;
public String heading;
public String Body;
public String name;
public Student Student;
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getHeading() {
return heading;
}
public void setHeading(String heading) {
this.heading = heading;
}

public String getBody() {
return Body;
}
public void setBody(String body) {
Body = body;
}



public Student getStudent() {
return Student;
}
public void setStudent(Student student) {
Student = student;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}






}


package test;


public class Student {
public String name;
public String age;
public ClassRoom classRoom;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public ClassRoom getClassRoom() {
return classRoom;
}
public void setClassRoom(ClassRoom classRoom) {
this.classRoom = classRoom;
}





}


package test;


public class ClassRoom {
public String name;



public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}



}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果7白屏死机怎么办 苹果6p屏膜失灵怎么办 苹果7p屏幕卡死怎么办 苹果7p手机死机怎么办 苹果6s死机了怎么办啊 6s死机了关不了怎么办 爱疯7死机了怎么办 苹果11.4系统老死机怎么办 苹果6震动坏了怎么办 苹果6手机死机了怎么办 苹果x耗电太快怎么办 苹果6升级11.3卡怎么办 苹果6splus耗电快怎么办 苹果手机系统升级后反应慢怎么办 苹果8听筒声音小怎么办 苹果6s通话声音小怎么办 苹果手机通讯录丢失了怎么办 苹果换id通讯录没有了怎么办 华为p7 更新重启怎么办 打电话的图标没了怎么办 苹果手机wifi信号弱怎么办 没电脑想装wifi怎么办 阿巴町手表二维码丢了怎么办 儿童手表二维码丢了怎么办 电话手表二维码丢了怎么办 360儿童手表二维码丢了怎么办 喜书郎电话手表二维码丢了怎么办 微信充话费充错号码怎么办 话费冲到了副卡怎么办 冲话费冲错了怎么办 微信支付未到账怎么办 速卖通修补配件到国外怎么办 速卖通流量低怎么办 速卖通被判定重复铺货怎么办 拼多多商品降权怎么办 运满满有了差评怎么办 房贷款还清后该怎么办 身份证被偷了怎么办啊 苹果手机wifi速度慢怎么办 电脑桌面上的图标不见了怎么办 夏天手机没地方放怎么办