直接看代码吧
package com.syscloud.wxutil;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import com.syscloud.util.DateUtils;
public class XmlFileUtil {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void toElement(Object object, Element root) {
if (object != null) {
if ((object instanceof Number) || (object instanceof Boolean) || (object instanceof String) || (object instanceof Double) || (object instanceof Float)) {
root.setText(object.toString());
} else if (object instanceof Map) {
mapToElement((Map) object, root);
} else if (object instanceof Collection) {
collToElement((Collection) object, root);
} else {
pojoToElement(object, root);
}
} else {
root.setText("");
}
}
/**
* list中存放的数据类型有基本类型、用户自定对象 map、list
*
* @param coll
* @param root
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
private static void collToElement(Collection<?> coll, Element root) {
for (Iterator<?> it = coll.iterator(); it.hasNext();) {
Object value = it.next();
if (coll == value) {
continue;
}
if ((value instanceof Number) || (value instanceof Boolean) || (value instanceof String) || (value instanceof Double) || (value instanceof Float)) {
Class<?> classes = value.getClass();
String objName = classes.getName();
String elementName = objName.substring(objName.lastIndexOf(".") + 1, objName.length());
Element elementOfObject = root.addElement(elementName);
elementOfObject.setText(value.toString());
} else if (value instanceof Map) {
Class<?> classes = value.getClass();
String objName = classes.getName();
String elementName = objName.substring(objName.lastIndexOf(".") + 1, objName.length());
Element elementOfObject = root.addElement(elementName);
mapToElement((Map) value, elementOfObject);
} else if (value instanceof Collection) {
Class<?> classes = value.getClass();
String objName = classes.getName();
String elementName = objName.substring(objName.lastIndexOf(".") + 1, objName.length());
Element elementOfObject = root.addElement(elementName);
collToElement((Collection) value, elementOfObject);
} else {
toElement(value, root);
}
}
};
/**
* map中存放的数据类型有基本类型、用户自定对象 map、list
*
* @param map
* @param root
*/
@SuppressWarnings("rawtypes")
private static void mapToElement(Map<String, Object> map, Element root) {
for (Iterator<?> it = map.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
String name = (String) entry.getKey();
if (null == name)
continue;
Object value = entry.getValue();
if (value == map) {
}
Element elementValue = root.addElement(name);
toElement(value, elementValue);
}
}
/**
*
* @param obj
* @param root
*/
private static void pojoToElement(Object obj, Element root) {
Class<?> classes = obj.getClass();
String objName = classes.getName();
String elementName = objName.substring(objName.lastIndexOf(".") + 1, objName.length());
/** 该类为一个节点 */
Element elementOfObject = null;
if(!root.getName().equals(elementName)){
elementOfObject = root.addElement(elementName);
}else{
elementOfObject = root;
}
Field[] fields = classes.getDeclaredFields();
for (Field f : fields) {
if (Modifier.isStatic(f.getModifiers()))
continue;
String name = f.getName();
f.setAccessible(true);
Object value = null;
try {
value = f.get(obj);
} catch (Exception e) {
value = null;
}
Element elementValue = elementOfObject.addElement(name);
toElement(value, elementValue);
}
}
public static void main(String[] args) {
ArchiveInfo archiveInfo = new ArchiveInfo();
BaseInfo baseInfo = new BaseInfo();
baseInfo.setSericeAcceptNumber("1553212123");
baseInfo.setAdmCode("setAdmCode");
baseInfo.setEntityno("21211056");
baseInfo.setUniSCID("11010010021022120X");
baseInfo.setRegistID("110100100201212");
baseInfo.setCompanyName("测试公司1");
baseInfo.setCompanyTypeCode("1100");
baseInfo.setEstablishDate(DateUtils.format(new Date()));
baseInfo.setAddress("建设大道5号");
baseInfo.setLegalPerson("张三");
baseInfo.setCompanyStatusCode("01");
baseInfo.setBusinessTypeCode("02");
baseInfo.setValidDate(DateUtils.format(new Date()));
archiveInfo.setBaseInfo(baseInfo);
List<AlterationItem> altlist = new ArrayList<AlterationItem>();
AlterationItem at1 = new AlterationItem();
at1.setItemCode("001");
at1.setAlterBeforeContent("这是修改之前的内容");
at1.setAlterAfterContent("这是修改之后的内容");
AlterationItem at2 = new AlterationItem();
at1.setItemCode("002");
at1.setAlterBeforeContent("这是修改之前的内容2");
at1.setAlterAfterContent("这是修改之后的内容2");
altlist.add(at1);
altlist.add(at2);
archiveInfo.setAlterationItemList(altlist);
List<InnerfileItem> innerList = new ArrayList<InnerfileItem>();
InnerfileItem in1 = new InnerfileItem();
in1.setInnerfileTitle("文件名称001");
in1.setBeginPageNum("1");
in1.setEndPageNum("2");
InnerfileItem in2 = new InnerfileItem();
in2.setInnerfileTitle("文件名称002");
in2.setBeginPageNum("3");
in2.setEndPageNum("8");
InnerfileItem in3 = new InnerfileItem();
in3.setInnerfileTitle("文件名称003");
in3.setBeginPageNum("9");
in3.setEndPageNum("14");
innerList.add(in1);
innerList.add(in2);
innerList.add(in3);
archiveInfo.setInnerfileItemList(innerList);
String xmlFilePath = System.getProperty("user.dir");
XmlFileUtil.createXmlDocument(archiveInfo, xmlFilePath +"\\Test.xml");
}
private static void createXmlDocument(Object obj, String filePath) {
Class<?> classes = obj.getClass();
String objName = classes.getName();
String elementName = objName.substring(objName.lastIndexOf(".") + 1, objName.length());
createXmlDocument(obj,filePath,elementName);
}
private static void createXmlDocument(Object obj, String filePath,String xmlRootName) {
Document xmlDoc = DocumentHelper.createDocument();
Element root = xmlDoc.addElement(xmlRootName);
toElement(obj, root);
//String xmlStr = "";
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK"); // 指定XML编码
//StringWriter writerStr = new StringWriter();
try {
//XMLWriter xmlw = new XMLWriter(writerStr,format);
XMLWriter xmlw = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File(filePath)), "UTF-8"), format);
xmlw.write(xmlDoc);
xmlw.close();
} catch (IOException e) {
e.printStackTrace();
}
//xmlStr = writerStr.getBuffer().toString();
//System.out.println(xmlStr);
}
}
class ArchiveInfo {
private BaseInfo BaseInfo;
private List<AlterationItem> AlterationItemList;
private List<InnerfileItem> InnerfileItemList;
public BaseInfo getBaseInfo() {
return BaseInfo;
}
public void setBaseInfo(BaseInfo baseInfo) {
BaseInfo = baseInfo;
}
public List<AlterationItem> getAlterationItemList() {
return AlterationItemList;
}
public void setAlterationItemList(List<AlterationItem> alterationItemList) {
AlterationItemList = alterationItemList;
}
public List<InnerfileItem> getInnerfileItemList() {
return InnerfileItemList;
}
public void setInnerfileItemList(List<InnerfileItem> innerfileItemList) {
InnerfileItemList = innerfileItemList;
}
}
class BaseInfo {
private String SericeAcceptNumber;
private String AdmCode;
private String Entityno;
private String UniSCID;
private String RegistID;
private String CompanyName;
private String CompanyTypeCode;
private String EstablishDate;
private String Address;
private String LegalPerson;
private String CompanyStatusCode;
private String BusinessTypeCode;
private String ValidDate;
public String getSericeAcceptNumber() {
return SericeAcceptNumber;
}
public void setSericeAcceptNumber(String sericeAcceptNumber) {
SericeAcceptNumber = sericeAcceptNumber;
}
public String getAdmCode() {
return AdmCode;
}
public void setAdmCode(String admCode) {
AdmCode = admCode;
}
public String getEntityno() {
return Entityno;
}
public void setEntityno(String entityno) {
Entityno = entityno;
}
public String getUniSCID() {
return UniSCID;
}
public void setUniSCID(String uniSCID) {
UniSCID = uniSCID;
}
public String getRegistID() {
return RegistID;
}
public void setRegistID(String registID) {
RegistID = registID;
}
public String getCompanyName() {
return CompanyName;
}
public void setCompanyName(String companyName) {
CompanyName = companyName;
}
public String getCompanyTypeCode() {
return CompanyTypeCode;
}
public void setCompanyTypeCode(String companyTypeCode) {
CompanyTypeCode = companyTypeCode;
}
public String getEstablishDate() {
return EstablishDate;
}
public void setEstablishDate(String establishDate) {
EstablishDate = establishDate;
}
public String getAddress() {
return Address;
}
public void setAddress(String address) {
Address = address;
}
public String getLegalPerson() {
return LegalPerson;
}
public void setLegalPerson(String legalPerson) {
LegalPerson = legalPerson;
}
public String getCompanyStatusCode() {
return CompanyStatusCode;
}
public void setCompanyStatusCode(String companyStatusCode) {
CompanyStatusCode = companyStatusCode;
}
public String getBusinessTypeCode() {
return BusinessTypeCode;
}
public void setBusinessTypeCode(String businessTypeCode) {
BusinessTypeCode = businessTypeCode;
}
public String getValidDate() {
return ValidDate;
}
public void setValidDate(String validDate) {
ValidDate = validDate;
}
}
class AlterationItem {
private String ItemCode;
private String AlterBeforeContent;
private String AlterAfterContent;
public String getItemCode() {
return ItemCode;
}
public void setItemCode(String itemCode) {
ItemCode = itemCode;
}
public String getAlterBeforeContent() {
return AlterBeforeContent;
}
public void setAlterBeforeContent(String alterBeforeContent) {
AlterBeforeContent = alterBeforeContent;
}
public String getAlterAfterContent() {
return AlterAfterContent;
}
public void setAlterAfterContent(String alterAfterContent) {
AlterAfterContent = alterAfterContent;
}
}
class InnerfileItem {
private String InnerfileTitle;
private String BeginPageNum;
private String EndPageNum;
public String getInnerfileTitle() {
return InnerfileTitle;
}
public void setInnerfileTitle(String innerfileTitle) {
InnerfileTitle = innerfileTitle;
}
public String getBeginPageNum() {
return BeginPageNum;
}
public void setBeginPageNum(String beginPageNum) {
BeginPageNum = beginPageNum;
}
public String getEndPageNum() {
return EndPageNum;
}
public void setEndPageNum(String endPageNum) {
EndPageNum = endPageNum;
}
}