运用了反射,将model中的属性一一获得出来。
相应的xml标签需要视情况修改
public static String convertToXml(Object inParamObject) throws BaseException { Class<?> superClass = null;// 超类 Class<?> childClass = null;// 子类 String returnXML = null; Object objectElementList = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder docBuilder = factory.newDocumentBuilder(); Document xmlDocument = docBuilder.newDocument(); xmlDocument.setXmlStandalone(true);// 设置生成的XML文档的头部信息中不包含Standalone // **************************ROOT元素,Start*************************************/ Element root = xmlDocument.createElement("ROOT"); // **************************HEADER元素,Start*************************************/ Element header = xmlDocument.createElement("HEADER"); superClass = inParamObject.getClass().getSuperclass();// 得到父类 Field[] superField = superClass.getDeclaredFields();// 获取实体类的所有属性,返回Field数组 for (int j = 0; j < superField.length; j++) { // 获取当前元素 Element element = StandardConvertHelper.getElement(xmlDocument, superClass, superField[j], inParamObject); header.appendChild(element); } root.appendChild(header); // **************************HEADER元素,End*************************************/ // **************************BODY元素,Start*************************************/ // BODY元素节点 Element body = xmlDocument.createElement("BODY"); // 获得输入对象中的List对象元素, 若输入对象中只有一个元素,而且是List(默认是List) Field[] inParamFields = inParamObject.getClass().getDeclaredFields(); if (inParamFields.length > 0 && inParamFields[0].getType() == List.class) { Field field = inParamObject.getClass().getField("list"); objectElementList = field.get(inParamObject); } if (objectElementList instanceof List) { // 组装body - 包含多个实体 List<?> objectList = (List<?>) objectElementList;// 将输入的Object对象强制转换成List对象 for (int i = 0; i < objectList.size(); i++) { Object childObject = objectList.get(i); childClass = objectList.get(i).getClass(); Field[] field = childClass.getDeclaredFields();// 获取实体类的所有属性,返回Field数组 // **************************ITEM元素,Start*************************************/ if (field == null || field.length == 0) { continue; } Element itemElement = xmlDocument.createElement("ITEM"); for (int j = 0; j < field.length; j++) { // 获取当前元素 Element element = StandardConvertHelper.getElement(xmlDocument, childClass, field[j], childObject); itemElement.appendChild(element); } body.appendChild(itemElement); // **************************ITEM元素,END*************************************/ } } else {// 若输入对象是普通javabean // 组装body childClass = inParamObject.getClass(); Field[] field = childClass.getDeclaredFields(); for (int j = 0; j < field.length; j++) { // 获取当前元素 Element element = StandardConvertHelper.getElement(xmlDocument, childClass, field[j], inParamObject); body.appendChild(element); } } root.appendChild(body); // **************************BODY元素,END*************************************/ xmlDocument.appendChild(root); // **************************ROOT元素,END*************************************/ // 开始转换 TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); DOMSource source = new DOMSource(xmlDocument); transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); transformer.setOutputProperty(OutputKeys.INDENT, "no"); StringWriter strWtr = new StringWriter(); StreamResult result = new StreamResult(strWtr); transformer.transform(source, result); returnXML = result.getWriter().toString(); } catch (Exception e) { throw new AppException("Model生成XML错误!", e); } return returnXML; }
private static Element getElement(Document xmlDocument, Class<?> sourceClass, Field field, Object inParamObject) throws BaseException { String name = field.getName();// 获取属性的名字 String value = null; Element element = xmlDocument.createElement(name); Method fieldMethod = null; try { fieldMethod = sourceClass.getMethod("get" + name); value = (String) fieldMethod.invoke(inParamObject); element.appendChild(xmlDocument.createTextNode(StringUtils.isEmpty(value) ? "" : value)); } catch (Exception e) { throw new AppException("Model生成XML错误!", e); } return element; }