java中xml转model模型

运用了反射,将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;

	}

猜你喜欢

转载自blog.csdn.net/qq_33160365/article/details/78633861