通用方法,任意实体泛型集合都能转xml,支持继承关系的实体,暂未实现实体中包含的实体转换
public static String beanListToXml(List<?> list ,Class<?> cls) throws Exception{
return beanListToXml(list, cls,"yyyy-MM-dd");
}
public static String beanListToXml(List<?> list ,Class<?> cls,String pattern) throws Exception{
StringBuffer sb = new StringBuffer();
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>").append("\r\n");
String className = cls.getSimpleName();
sb.append("<").append(className).append("List>").append("\r\n");
Field[] fileds = cls.getDeclaredFields();
fileds = getFileds(cls,fileds);
try {
for(int i=0;i<list.size();i++){
sb.append("<").append(className).append(">").append("\r\n");
for(int j = 0;j<fileds.length;j++){
String filedName = fileds[j].getName();
String getMethodName = "get"
+ filedName.substring(0, 1).toUpperCase()
+ filedName.substring(1);
Method getMethod = cls.getMethod(getMethodName,
new Class[] {});
Object value = getMethod.invoke(list.get(i), new Object[] {});
String textValue = "";
if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
textValue = sdf.format((Date) value);
}else{
textValue = Tool.nvl(value);
}
sb.append("<").append(filedName).append(">");
sb.append(chargeStr(textValue));
sb.append("</").append(filedName).append(">");
sb.append("\r\n");
}
sb.append("</").append(className).append(">").append("\r\n");
}
sb.append("</").append(className).append("List>").append("\r\n");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new DataException("实体转换成xml时出错");
}
return sb.toString();
}
private static Field[] getFileds(Class<?> cls,Field[] fileds) {
// TODO Auto-generated method stub
Field[] result = null;
Class parent = cls.getSuperclass();
if(parent != null){
Field[] pfields = parent.getDeclaredFields();
result = new Field[fileds.length+pfields.length];
System.arraycopy(fileds, 0, result, 0, fileds.length);
for(int i=0;i<pfields.length;i++){
result[fileds.length+i] = pfields[i];
}
getFileds(parent, fileds);
}
return result;
}
private static String chargeStr(String str){
String result = str;
result = result.replace("<", "<");
result = result.replace(">", ">");
result = result.replace("&", "&");
result = result.replace("'", "'");
result = result.replace("\"", """);
return result;
}