將bean對象寫成xml格式

首先創建兩個內部bean組件,設置get,set方法

class TestBean extends TestBean1{
	private String att1;
	private String att2;
	private int int1;
	private List<TestBean1> listBean;
	public List<TestBean1> getListBean() {
		return listBean;
	}
	public void setListBean(List<TestBean1> listBean) {
		this.listBean = listBean;
	}
	public String getAtt1() {
		return att1;
	}
	public void setAtt1(String att1) {
		this.att1 = att1;
	}
	public String getAtt2() {
		return att2;
	}
	public void setAtt2(String att2) {
		this.att2 = att2;
	}
	public int getInt1() {
		return int1;
	}
	public void setInt1(int int1) {
		this.int1 = int1;
	}
	
}

class TestBean1{
	private String aaa;
	private String bbb;
	public String getAaa() {
		return aaa;
	}
	public void setAaa(String aaa) {
		this.aaa = aaa;
	}
	public String getBbb() {
		return bbb;
	}
	public void setBbb(String bbb) {
		this.bbb = bbb;
	}
xml的根元素應該是bean的名稱,所以我們要獲取到bean的名稱

public static String getClassNameWithoutPackage(Class cl)
  {
    String className = cl.getName();
    int pos = className.lastIndexOf('.') + 1;//將包名截取調
    if (pos == -1) {
      pos = 0;
    }
    return className.substring(pos);
  }
創建xml

public static byte[] toBytes(Object bean, String encoding) throws Exception {
		Document document = DocumentHelper.createDocument();//創建
		Element root = document.addElement(getClassNameWithoutPackage(bean.getClass);//添加根元素
		addNode(root, bean);//添加node節點
		// document.setXMLEncoding(encoding);
private static byte[] toBytes(Document document, String encoding)
			throws Exception {
		OutputFormat format = new OutputFormat("\t", true);
		format.setEncoding(encoding);

		ByteArrayOutputStream out = new ByteArrayOutputStream();
		XMLWriter writer = new XMLWriter(out, format);
		writer.write(document);

		return out.toByteArray();

private static void addNode(Element e, Object bean) throws Exception {
		List fieldsName = ObjectUtils.getAllFieldName(bean.getClass());// 獲取所有屬性名稱
		int len = fieldsName.size();
		for (int i = 0; i < len; i++) {
			String fieldName = (String) fieldsName.get(i);
			Object o = DtoUtils.getFieldValue(bean, fieldName);// 獲取屬性對應的值
			if (o == null) {
			} else if (o instanceof String) {
				String fieldValue = (String) o;
				e.addElement(fieldName).addText(fieldValue);
			} else if (o instanceof List) {
				List l = (List) o;
				for (Iterator it = l.iterator(); it.hasNext();) {
					Object lo = it.next();
					Element oe = e.addElement(DtoUtils.getBeanName(lo));
					addNode(oe, lo);
				}

			} else {// 如果是對象
				Element t = e.addElement(DtoUtils.getBeanName(o));
				addNode(t, o);
			}
		}
	}
獲取所有屬性名稱的方法

public static List getAllFieldName(Class cl) {
    List list = new ArrayList();
    Field[] fields = cl.getDeclaredFields();
    for (int i = 0; i < fields.length; i++) {
      Field field = fields[i];
      if (!field.getName().equals("serialVersionUID"))//序列號
      {
        list.add(field.getName());
      }
    }
    Class superClass = cl;
    while (true) {
      superClass = superClass.getSuperclass();
      if (superClass == Object.class) {
        break;
      }
      list.addAll(getAllFieldName(superClass));
    }
    return list;
  }
獲取屬性對應的值的方法

public static Object getFieldValue(Object bean, String fieldName)
			throws Exception {
		String uFieldName = fieldName.substring(0, 1).toUpperCase(Locale.US) + fieldName.substring(1);//將第一個字母變爲大寫
		Object o = null;
		try {
			o = ObjectUtils.invoke(bean, "get" + uFieldName, null, null);
		} catch (java.lang.NoSuchMethodException nsme) {
//		   nsme.printStackTrace();
		}
		return o;
	}

public static Object invoke(Object oldObject, String methodName, Class[] argsClass, Object[] args)
    throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException
  {
    Class cl = oldObject.getClass();
    Method method = cl.getMethod(methodName, argsClass);
    return method.invoke(oldObject, args);
  }

寫出操作

private static byte[] toBytes(Document document, String encoding)
			throws Exception {
		OutputFormat format = new OutputFormat("\t", true);
		format.setEncoding(encoding);

		ByteArrayOutputStream out = new ByteArrayOutputStream();
		XMLWriter writer = new XMLWriter(out, format);
		writer.write(document);

		return out.toByteArray();






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章