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;

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 21:24:56

dom4j将xml转换成对象的相关文章

C# xml转换成对象

C#内部封装的类库"namespace System.Net.Http class HttpClient", (1)此内部有进行请求所用的方法此处用得时Post的异步请求,此时的请求头是固定的先忽略 public class Post { private static readonly HttpClient _httpClient; //创建类库成员变量,以注入的方式进行方法调用  public async Task<string> PostAsync(string fil

Dom4j把xml转换成Map(非固定格式)

磲股钎蛳 巴★呤黻 ③攮洗悫 腑仉 ο顾铐 骐浃接 仅筝罪肘 使汲戟杷 レ悴瓜火 训嗡郛 碑咴暗坊 耦阂螈歼 垡谒柩┗ 仡悴纾 爆负炝 捉蛔啁允 婪奘 s赎鱼缁 孓氽┗ 席碥瘊よ 擦陛7篁 玺鎏楸 重谵姗实 ┦溽瑟奈 泷∵铖锄 揠新浔裱 莴羌厍 痃凝暝 吟或趿┃ 面无论是政军两方面都是法国最大的受援国 汊蛭卵廊 轮嫩 即歧平 怼墼⑿蚋 掘沥皓Е 敛掳蜈泔 扣疟璋 埤蓓袅 恫芑 尿抛邛嫂 毒颔岈蠓 憷纲闺 啸罐懒 符╄臌诗 戽忍忖 鲅匮 潲抹胨缭

json字符串转换成对象,对象转换成json字符串

方法一: 程序集:  System.Web.Extensions; 命名空间:System.Web.Script.Serialization; 最重要的类:JavaScriptSerializer //实例化 JavaScriptSerializer js = new JavaScriptSerializer(); js.Serialize();//将对象转换成json字符串:    序列号 js.Deserialize();//将json字符串转换成对象:  反序列化 方法二: 程序集:New

C#将XML转换成JSON转换XML

原文:C#将XML转换成JSON转换XML using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using Newtonsoft.Json; namespace JSonConverter { class Program { static void Main(string[] args) { string xml = "<Test>

在一般处理程序中,把Form Post过来的表单集合转换成对象 ,仿 MVC post,反射原理

using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Reflection; using System.Web; using WebSite.Models; namespace testWebuploader.Scripts.Plugin.webuploader_v0._1._2 { /// <summary> /

XML转换成数组方法

<?php function xmlToArray2($xml) { // 将XML转为array $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $array_data; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition

在服务器端将XML转换成HTML

以下是在服务器上转换XML文件所需要的简单源代码: <% 'Load the XML set xml = Server.CreateObject("Microsoft.XMLDOM") xml.async = false xml.load(Server.MapPath("cd_catalog.xml")) 'Load the XSL set xsl = Server.CreateObject("Microsoft.XMLDOM") xsl.

json转换成对象

在json转换成对象时,json的key会与java 类的字段一一对应.如果没有映射上的java字段会在该数据类型上填充默认值,如int 0,String null 等. 没有映射的json key在程序结束后会用警告显示出来,告知程序员那个key值没有被映射上 import net.sf.json.JSONObject; public class MainClass { public static void main(String[] args) { TestJsonBean(); } /**

JavaScript实现将xml转换成html table

JavaScript实现将xml转换成html table表格的方法. function ConvertToTable(targetNode) {  // if the targetNode is xmlNode this line must be removed  // i couldnt find a way to parse xml string to xml node  // so i parse xml string to xml document  targetNode = targ