dom4j將xml轉換成對象

來源:互聯網
上載者:User

標籤:dom4j   java   

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;
}



}



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

dom4j將xml轉換成對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.