|  | @ -0,0 +1,812 @@
 | 
	
		
			
				|  |  | package com.yihu.jw.util.common;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.fasterxml.jackson.core.JsonGenerator;
 | 
	
		
			
				|  |  | import com.fasterxml.jackson.core.JsonParser;
 | 
	
		
			
				|  |  | import com.fasterxml.jackson.databind.ObjectMapper;
 | 
	
		
			
				|  |  | import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 | 
	
		
			
				|  |  | import org.dom4j.*;
 | 
	
		
			
				|  |  | import org.dom4j.io.OutputFormat;
 | 
	
		
			
				|  |  | import org.dom4j.io.XMLWriter;
 | 
	
		
			
				|  |  | import org.dom4j.tree.DefaultAttribute;
 | 
	
		
			
				|  |  | import org.slf4j.Logger;
 | 
	
		
			
				|  |  | import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  | import org.springframework.util.StringUtils;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import java.io.ByteArrayOutputStream;
 | 
	
		
			
				|  |  | import java.io.IOException;
 | 
	
		
			
				|  |  | import java.io.StringWriter;
 | 
	
		
			
				|  |  | import java.io.UnsupportedEncodingException;
 | 
	
		
			
				|  |  | import java.lang.reflect.Field;
 | 
	
		
			
				|  |  | import java.util.*;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | public class XMLUtil {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private static Logger logger = LoggerFactory.getLogger(XMLUtil.class);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 把xml字符串转换成 Document对象。
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param xml 需要转换的xml字符串
 | 
	
		
			
				|  |  |      * @return 返回Document对象
 | 
	
		
			
				|  |  |      * @throws Exception 如果转换成Document对象异常的话抛出异常。
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static Document parseXml(String xml) throws Exception {
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             return DocumentHelper.parseText(xml);
 | 
	
		
			
				|  |  |         } catch (DocumentException e) {
 | 
	
		
			
				|  |  |             // TODO Auto-generated catch block
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |             throw new Exception("传入的 xml 不是标准的xml字符串,请检查字符串是否合法。");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 转换成xml字符串
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param xmlDoc 需要解析的xml对象
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static String toXML_UTF_8(Document xmlDoc) throws Exception {
 | 
	
		
			
				|  |  |         return toXML(xmlDoc, "UTF-8", true);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 转换成xml字符串
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param xmlDoc 需要解析的xml对象
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static String toXML_GBK(Document xmlDoc) throws Exception {
 | 
	
		
			
				|  |  |         return toXML(xmlDoc, "GBK", true);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 转换成xml字符串
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param xmlDoc   需要解析的xml对象
 | 
	
		
			
				|  |  |      * @param encoding 编码格式:UTF-8、GBK
 | 
	
		
			
				|  |  |      * @param iscom    是否为紧凑型格式
 | 
	
		
			
				|  |  |      * @return 修正完成后的xml字符串
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static String toXML(Document xmlDoc, String encoding,
 | 
	
		
			
				|  |  |                                boolean iscom) throws Exception {
 | 
	
		
			
				|  |  |         ByteArrayOutputStream byteRep = new ByteArrayOutputStream();
 | 
	
		
			
				|  |  |         OutputFormat format = null;
 | 
	
		
			
				|  |  |         if (iscom) {
 | 
	
		
			
				|  |  |             format = OutputFormat.createCompactFormat();// 紧凑型格式
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             format = OutputFormat.createPrettyPrint();// 缩减型格式
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         format.setEncoding(encoding);// 设置编码
 | 
	
		
			
				|  |  |         format.setTrimText(false);// 设置text中是否要删除其中多余的空格
 | 
	
		
			
				|  |  |         XMLWriter xw;
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             xw = new XMLWriter(byteRep, format);
 | 
	
		
			
				|  |  |             xw.write(xmlDoc);
 | 
	
		
			
				|  |  |         } catch (UnsupportedEncodingException e) {
 | 
	
		
			
				|  |  |             // TODO Auto-generated catch block
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |             throw new Exception("传入的编码格式错误,请传入正确的编码。");
 | 
	
		
			
				|  |  |         } catch (IOException e) {
 | 
	
		
			
				|  |  |             // TODO Auto-generated catch block
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |             throw new Exception("文档转换成xml字符串时出错。" + xmlDoc.asXML());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return byteRep.toString();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 对节点Element 添加节点。
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param e     需要添加的节点
 | 
	
		
			
				|  |  |      * @param name  添加的节点的名称
 | 
	
		
			
				|  |  |      * @param value 添加的内容
 | 
	
		
			
				|  |  |      *              <br/>
 | 
	
		
			
				|  |  |      *              Demo:
 | 
	
		
			
				|  |  |      *              < Root > aaa < /Root >
 | 
	
		
			
				|  |  |      *              <br/>
 | 
	
		
			
				|  |  |      *              call-->  addChildElement(root, "A", "a");
 | 
	
		
			
				|  |  |      *              <br/>
 | 
	
		
			
				|  |  |      *              result--> < Root >< A >a< /A >< /Root >
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static void addElement(Element e, String name, Object value) {
 | 
	
		
			
				|  |  |         if (isBlank(value)) {
 | 
	
		
			
				|  |  |             e.addElement(name).addText("");
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             e.addElement(name).addText(value.toString());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 判断对象是否为空!(null,"", "null")
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param value
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     private static boolean isBlank(String value) {
 | 
	
		
			
				|  |  |         if (value == null || value.length() == 0) {
 | 
	
		
			
				|  |  |             return true;
 | 
	
		
			
				|  |  |         } else if (StringUtils.isEmpty(value)) {
 | 
	
		
			
				|  |  |             return true;
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             return false;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 判断对象是否非空!(null,"", "null")
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param obj
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static boolean isNotBlank(Object obj) {
 | 
	
		
			
				|  |  |         return !isBlank(obj);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 判断对象是否为空!(null,"", "null")
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param obj
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static boolean isBlank(Object obj) {
 | 
	
		
			
				|  |  |         if (obj == null) {
 | 
	
		
			
				|  |  |             return true;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (obj instanceof String) {
 | 
	
		
			
				|  |  |             return isBlank((String) obj);
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             return isBlank(obj.toString());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static void addElement(Element e, String name, Integer value) {
 | 
	
		
			
				|  |  |         Element current = e.addElement(name);
 | 
	
		
			
				|  |  |         if (value != null) {
 | 
	
		
			
				|  |  |             current.setText(Integer.toString(value));
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 添加CDATA 类型节点
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param e
 | 
	
		
			
				|  |  |      * @param name
 | 
	
		
			
				|  |  |      * @param value
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static void addCDATAElement(Element e, String name, String value) {
 | 
	
		
			
				|  |  |         Element current = e.addElement(name);
 | 
	
		
			
				|  |  |         if (value != null) {
 | 
	
		
			
				|  |  |             current.addCDATA(value.trim());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 添加CDATA 类型节点
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param e
 | 
	
		
			
				|  |  |      * @param name
 | 
	
		
			
				|  |  |      * @param value
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static void addCDATAElement(Element e, String name, Integer value) {
 | 
	
		
			
				|  |  |         Element current = e.addElement(name);
 | 
	
		
			
				|  |  |         if (value != null) {
 | 
	
		
			
				|  |  |             current.addCDATA(value.toString());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取节点中的整数
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static int getInt(Element e, String name, boolean isMust) throws Exception {
 | 
	
		
			
				|  |  |         Element current = e.element(name);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if (current == null || current.getText() == null || "".equals(current.getText().trim()) || current.getText().length() <= 0) {
 | 
	
		
			
				|  |  |             if (isMust) {
 | 
	
		
			
				|  |  |                 throw new Exception("在 $" + e.asXML() + "$中获取节点:" + name + " 的值为空。");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             return 0;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         Integer i = 0;
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             i = Integer.parseInt(current.getTextTrim());
 | 
	
		
			
				|  |  |         } catch (NumberFormatException e1) {
 | 
	
		
			
				|  |  |             i = 0;
 | 
	
		
			
				|  |  |             if (isMust) {
 | 
	
		
			
				|  |  |                 throw new Exception("在 $" + e.asXML() + "$中获取节点:" + name + " 的值不是整形。");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return i;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取节点中的字符串
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static String getString(Element e, String name, boolean isMust) throws Exception {
 | 
	
		
			
				|  |  |         return getString(e, name, isMust, null);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取节点中的字符串
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param e
 | 
	
		
			
				|  |  |      * @param name
 | 
	
		
			
				|  |  |      * @param isMust 是否必填 true 必填  false非必填
 | 
	
		
			
				|  |  |      * @param defVal 默认值
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static String getString(Element e, String name, boolean isMust, String defVal) throws Exception {
 | 
	
		
			
				|  |  |         Element current = e.element(name);
 | 
	
		
			
				|  |  |         if (current == null || current.getText() == null || StringUtils.isEmpty(current.getText().trim())) {
 | 
	
		
			
				|  |  |             if (isMust) {
 | 
	
		
			
				|  |  |                 throw new Exception("在 $" + e.asXML() + "$中获取节点:" + name + " 的值为空。");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             return defVal;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return current.getTextTrim();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static String ElementStringValue(String str) {
 | 
	
		
			
				|  |  |         if (str != null) {
 | 
	
		
			
				|  |  |             return str;
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             return "";
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static Integer ElementIntegerValue(Integer str) {
 | 
	
		
			
				|  |  |         if (str != null) {
 | 
	
		
			
				|  |  |             return str;
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             return 0;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static String ElementValue(String str) {
 | 
	
		
			
				|  |  |         if (str != null && !str.equalsIgnoreCase("null")) {
 | 
	
		
			
				|  |  |             return str;
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             return "";
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static String xml2json(String xml){
 | 
	
		
			
				|  |  |         StringWriter w = new StringWriter();
 | 
	
		
			
				|  |  |         ObjectMapper objectMapper = new ObjectMapper();
 | 
	
		
			
				|  |  |         XmlMapper xmlMapper = new XmlMapper();
 | 
	
		
			
				|  |  |         JsonParser jp;
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             jp = xmlMapper.getFactory().createParser(xml);
 | 
	
		
			
				|  |  |             JsonGenerator jg = objectMapper.getFactory().createGenerator(w);
 | 
	
		
			
				|  |  |             while (jp.nextToken() != null) {
 | 
	
		
			
				|  |  |                 String name = jp.getParsingContext().getCurrentName();
 | 
	
		
			
				|  |  |                 if ("".equals(name)){
 | 
	
		
			
				|  |  |                     jp.overrideCurrentName("text");
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 jg.copyCurrentEvent(jp);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             jp.close();
 | 
	
		
			
				|  |  |             jg.close();
 | 
	
		
			
				|  |  |         } catch (Exception e) {
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return w.toString();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static String formatXML(Document doc) throws Exception {
 | 
	
		
			
				|  |  |         StringWriter out = null;
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             OutputFormat formate = OutputFormat.createPrettyPrint();
 | 
	
		
			
				|  |  |             out = new StringWriter();
 | 
	
		
			
				|  |  |             XMLWriter writer = new XMLWriter(out, formate);
 | 
	
		
			
				|  |  |             writer.write(doc);
 | 
	
		
			
				|  |  |         } catch (IOException e) {
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |         } finally {
 | 
	
		
			
				|  |  |             out.close();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return out.toString();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     // ---------- map转XML--------------
 | 
	
		
			
				|  |  |     public static String map2xml(Map<String, String> dataMap) {
 | 
	
		
			
				|  |  |         synchronized (XMLUtil.class) {
 | 
	
		
			
				|  |  |             StringBuilder strBuilder = new StringBuilder();
 | 
	
		
			
				|  |  |             strBuilder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
 | 
	
		
			
				|  |  |             strBuilder.append("<QUERY_FORM>");
 | 
	
		
			
				|  |  |             Set<String> objSet = dataMap.keySet();
 | 
	
		
			
				|  |  |             for (Object key : objSet) {
 | 
	
		
			
				|  |  |                 if (key == null) {
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 strBuilder.append("<").append(key.toString()).append(">");
 | 
	
		
			
				|  |  |                 Object value = dataMap.get(key);
 | 
	
		
			
				|  |  |                 strBuilder.append(coverter(value));
 | 
	
		
			
				|  |  |                 strBuilder.append("</").append(key.toString()).append(">");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             strBuilder.append("</QUERY_FORM>");
 | 
	
		
			
				|  |  |             return strBuilder.toString();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static String map2xmlForWx(Map<String, String> dataMap) {
 | 
	
		
			
				|  |  |         synchronized (XMLUtil.class) {
 | 
	
		
			
				|  |  |             StringBuilder strBuilder = new StringBuilder();
 | 
	
		
			
				|  |  |             strBuilder.append("<xml>");
 | 
	
		
			
				|  |  |             Set<String> objSet = dataMap.keySet();
 | 
	
		
			
				|  |  |             for (Object key : objSet) {
 | 
	
		
			
				|  |  |                 if (key == null) {
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 strBuilder.append("<").append(key.toString()).append(">");
 | 
	
		
			
				|  |  |                 Object value = dataMap.get(key);
 | 
	
		
			
				|  |  |                 strBuilder.append(coverter(value));
 | 
	
		
			
				|  |  |                 strBuilder.append("</").append(key.toString()).append(">");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             strBuilder.append("</xml>");
 | 
	
		
			
				|  |  |             return strBuilder.toString();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static String coverter(Object[] objects) {
 | 
	
		
			
				|  |  |         StringBuilder strBuilder = new StringBuilder();
 | 
	
		
			
				|  |  |         for (Object obj : objects) {
 | 
	
		
			
				|  |  |             strBuilder.append("<item className=").append(obj.getClass().getName()).append(">\n");
 | 
	
		
			
				|  |  |             strBuilder.append(coverter(obj));
 | 
	
		
			
				|  |  |             strBuilder.append("</item>\n");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return strBuilder.toString();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static String coverter(Collection<?> objects) {
 | 
	
		
			
				|  |  |         StringBuilder strBuilder = new StringBuilder();
 | 
	
		
			
				|  |  |         for (Object obj : objects) {
 | 
	
		
			
				|  |  |             strBuilder.append("<item className=").append(obj.getClass().getName()).append(">\n");
 | 
	
		
			
				|  |  |             strBuilder.append(coverter(obj));
 | 
	
		
			
				|  |  |             strBuilder.append("</item>\n");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return strBuilder.toString();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static String coverter(Object object) {
 | 
	
		
			
				|  |  |         if (object instanceof Object[]) {
 | 
	
		
			
				|  |  |             return coverter((Object[]) object);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (object instanceof Collection) {
 | 
	
		
			
				|  |  |             return coverter((Collection<?>) object);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         StringBuilder strBuilder = new StringBuilder();
 | 
	
		
			
				|  |  |         if (isObject(object)) {
 | 
	
		
			
				|  |  |             Class<? extends Object> clz = object.getClass();
 | 
	
		
			
				|  |  |             Field[] fields = clz.getDeclaredFields();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             for (Field field : fields) {
 | 
	
		
			
				|  |  |                 field.setAccessible(true);
 | 
	
		
			
				|  |  |                 if (field == null) {
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 String fieldName = field.getName();
 | 
	
		
			
				|  |  |                 Object value = null;
 | 
	
		
			
				|  |  |                 try {
 | 
	
		
			
				|  |  |                     value = field.get(object);
 | 
	
		
			
				|  |  |                 } catch (IllegalArgumentException e) {
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 } catch (IllegalAccessException e) {
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 strBuilder.append("<").append(fieldName)
 | 
	
		
			
				|  |  |                         .append(" className=\"").append(
 | 
	
		
			
				|  |  |                         value.getClass().getName()).append("\">");
 | 
	
		
			
				|  |  |                 if (isObject(value)) {
 | 
	
		
			
				|  |  |                     strBuilder.append(coverter(value));
 | 
	
		
			
				|  |  |                 } else if (value == null) {
 | 
	
		
			
				|  |  |                     strBuilder.append("null");
 | 
	
		
			
				|  |  |                 } else {
 | 
	
		
			
				|  |  |                     strBuilder.append(value.toString() + "");
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 strBuilder.append("</").append(fieldName).append(">");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         } else if (object == null) {
 | 
	
		
			
				|  |  |             strBuilder.append("null");
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             strBuilder.append(object.toString());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return strBuilder.toString();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private static boolean isObject(Object obj) {
 | 
	
		
			
				|  |  |         if (obj == null) {
 | 
	
		
			
				|  |  |             return false;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (obj instanceof String) {
 | 
	
		
			
				|  |  |             return false;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (obj instanceof Integer) {
 | 
	
		
			
				|  |  |             return false;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (obj instanceof Double) {
 | 
	
		
			
				|  |  |             return false;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (obj instanceof Float) {
 | 
	
		
			
				|  |  |             return false;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (obj instanceof Byte) {
 | 
	
		
			
				|  |  |             return false;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (obj instanceof Long) {
 | 
	
		
			
				|  |  |             return false;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (obj instanceof Character) {
 | 
	
		
			
				|  |  |             return false;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (obj instanceof Short) {
 | 
	
		
			
				|  |  |             return false;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (obj instanceof Boolean) {
 | 
	
		
			
				|  |  |             return false;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return true;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     // --------------------xml转map---------------
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private static void ele2map(Map map, Element ele)  {
 | 
	
		
			
				|  |  |         // 获得当前节点的子节点
 | 
	
		
			
				|  |  |         List<Element> elements = ele.elements();
 | 
	
		
			
				|  |  |         if (elements.size() == 0) {
 | 
	
		
			
				|  |  |             // 没有子节点说明当前节点是叶子节点,直接取值即可
 | 
	
		
			
				|  |  |             map.put(ele.getName(), ele.getText());
 | 
	
		
			
				|  |  |         } else if (elements.size() == 1) {
 | 
	
		
			
				|  |  |             // 只有一个子节点说明不用考虑list的情况,直接继续递归即可
 | 
	
		
			
				|  |  |             Map<String, Object> tempMap = new HashMap<String, Object>();
 | 
	
		
			
				|  |  |             ele2map(tempMap, elements.get(0));
 | 
	
		
			
				|  |  |             //设置标签属性
 | 
	
		
			
				|  |  |             setAttributes(tempMap,elements.get(0));
 | 
	
		
			
				|  |  |             if (tempMap.size()==1){
 | 
	
		
			
				|  |  |                 map.put(ele.getName(), ele.getText());
 | 
	
		
			
				|  |  |             }else {
 | 
	
		
			
				|  |  |                 map.put(ele.getName(), tempMap);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             // 多个子节点的话就得考虑list的情况了,比如多个子节点有节点名称相同的
 | 
	
		
			
				|  |  |             // 构造一个map用来去重
 | 
	
		
			
				|  |  |             Map<String, Object> tempMap = new HashMap<String, Object>();
 | 
	
		
			
				|  |  |             for (Element element : elements) {
 | 
	
		
			
				|  |  |                 tempMap.put(element.getName(), null);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             Set<String> keySet = tempMap.keySet();
 | 
	
		
			
				|  |  |             for (String string : keySet) {
 | 
	
		
			
				|  |  |                 Namespace namespace = elements.get(0).getNamespace();
 | 
	
		
			
				|  |  |                 List<Element> elements2 = ele.elements(new QName(string, namespace));
 | 
	
		
			
				|  |  |                 // 如果同名的数目大于1则表示要构建list
 | 
	
		
			
				|  |  |                 if (elements2.size() > 1) {
 | 
	
		
			
				|  |  |                     List<Map> list = new ArrayList<Map>();
 | 
	
		
			
				|  |  |                     for (Element element : elements2) {
 | 
	
		
			
				|  |  |                         Map<String, Object> tempMap1 = new HashMap<String, Object>();
 | 
	
		
			
				|  |  |                         ele2map(tempMap1, element);
 | 
	
		
			
				|  |  |                         setAttributes(tempMap1,element);//属性值设置
 | 
	
		
			
				|  |  |                         list.add(tempMap1);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     map.put(string, list);
 | 
	
		
			
				|  |  |                 } else {
 | 
	
		
			
				|  |  |                     // 同名的数量不大于1则直接递归去
 | 
	
		
			
				|  |  |                     Map<String, Object> tempMap1 = new HashMap<String, Object>();
 | 
	
		
			
				|  |  |                     ele2map(tempMap1, elements2.get(0));
 | 
	
		
			
				|  |  |                     setAttributes(tempMap1,elements2.get(0));//属性值设置
 | 
	
		
			
				|  |  |                     if (tempMap1.containsKey(string)) {
 | 
	
		
			
				|  |  |                         map.put(string, tempMap1.get(string));
 | 
	
		
			
				|  |  |                     }else {
 | 
	
		
			
				|  |  |                         map.put(string, tempMap1);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * 设置属性值(xml转map)
 | 
	
		
			
				|  |  |      * @param map
 | 
	
		
			
				|  |  |      * @param element
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static void setAttributes(Map map,Element element){
 | 
	
		
			
				|  |  |         List list = element.attributes();
 | 
	
		
			
				|  |  |         Map<String,Object> attrMap = null;
 | 
	
		
			
				|  |  |         DefaultAttribute e = null;
 | 
	
		
			
				|  |  |         if (!list.isEmpty()) {
 | 
	
		
			
				|  |  |             attrMap = new HashMap<>();
 | 
	
		
			
				|  |  |             for (int i = 0; i < list.size(); i++) {
 | 
	
		
			
				|  |  |                 e = (DefaultAttribute) list.get(i);
 | 
	
		
			
				|  |  |                 attrMap.put(e.getName(),e.getText());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             attrMap.put("text",element.getText());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if (attrMap!=null && !attrMap.isEmpty()){
 | 
	
		
			
				|  |  |             map.put(element.getName(),attrMap);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | //============================================
 | 
	
		
			
				|  |  |     public static Object xml2map(Element element) {
 | 
	
		
			
				|  |  |         System.out.println(element);
 | 
	
		
			
				|  |  |         Map<String, Object> map = new HashMap<String, Object>();
 | 
	
		
			
				|  |  |         List<Element> elements = element.elements();
 | 
	
		
			
				|  |  |         if (elements.size() == 0) {
 | 
	
		
			
				|  |  |             map.put(element.getName(), element.getText());
 | 
	
		
			
				|  |  |             if (!element.isRootElement()) {
 | 
	
		
			
				|  |  |                 return element.getText();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         } else if (elements.size() == 1) {
 | 
	
		
			
				|  |  |             map.put(elements.get(0).getName(), xml2map(elements.get(0)));
 | 
	
		
			
				|  |  |         } else if (elements.size() > 1) {
 | 
	
		
			
				|  |  |             // 多个子节点的话就得考虑list的情况了,比如多个子节点有节点名称相同的
 | 
	
		
			
				|  |  |             // 构造一个map用来去重
 | 
	
		
			
				|  |  |             Map<String, Element> tempMap = new HashMap<String, Element>();
 | 
	
		
			
				|  |  |             for (Element ele : elements) {
 | 
	
		
			
				|  |  |                 tempMap.put(ele.getName(), ele);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             Set<String> keySet = tempMap.keySet();
 | 
	
		
			
				|  |  |             for (String string : keySet) {
 | 
	
		
			
				|  |  |                 Namespace namespace = tempMap.get(string).getNamespace();
 | 
	
		
			
				|  |  |                 List<Element> elements2 = element.elements(new QName(string, namespace));
 | 
	
		
			
				|  |  |                 // 如果同名的数目大于1则表示要构建list
 | 
	
		
			
				|  |  |                 if (elements2.size() > 1) {
 | 
	
		
			
				|  |  |                     List<Object> list = new ArrayList<Object>();
 | 
	
		
			
				|  |  |                     for (Element ele : elements2) {
 | 
	
		
			
				|  |  |                         list.add(xml2map(ele));
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     map.put(string, list);
 | 
	
		
			
				|  |  |                 } else {
 | 
	
		
			
				|  |  |                     // 同名的数量不大于1则直接递归去
 | 
	
		
			
				|  |  |                     map.put(string, xml2map(elements2.get(0)));
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return map;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | //    ============================================
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static Map xmltoMap(String xml) {
 | 
	
		
			
				|  |  |         if (!StringUtils.isEmpty(xml)) {
 | 
	
		
			
				|  |  |             try {
 | 
	
		
			
				|  |  |                 Map map = new HashMap();
 | 
	
		
			
				|  |  |                 Document document = DocumentHelper.parseText(xml);
 | 
	
		
			
				|  |  |                 Element nodeElement = document.getRootElement();
 | 
	
		
			
				|  |  |                 List node = nodeElement.elements();
 | 
	
		
			
				|  |  |                 for (Iterator it = node.iterator(); it.hasNext(); ) {
 | 
	
		
			
				|  |  |                     Element elm = (Element) it.next();
 | 
	
		
			
				|  |  |                     List list = elm.elements();
 | 
	
		
			
				|  |  |                     if(list.size() > 0){
 | 
	
		
			
				|  |  |                         Map xmltoMap = xmltoMap(elm.asXML());
 | 
	
		
			
				|  |  |                         map.putAll(xmltoMap);
 | 
	
		
			
				|  |  |                     }else{
 | 
	
		
			
				|  |  |                         map.put(elm.getName(), elm.getText());
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     elm = null;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 node = null;
 | 
	
		
			
				|  |  |                 nodeElement = null;
 | 
	
		
			
				|  |  |                 document = null;
 | 
	
		
			
				|  |  |                 return map;
 | 
	
		
			
				|  |  |             } catch (Exception e) {
 | 
	
		
			
				|  |  |                 e.printStackTrace();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return null;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static Map xmltoMap2(String xml) {
 | 
	
		
			
				|  |  |         Map<String,Object> map = new HashMap<String,Object>();
 | 
	
		
			
				|  |  |         Document doc;
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             doc = DocumentHelper.parseText(xml);
 | 
	
		
			
				|  |  |             Element el = doc.getRootElement();
 | 
	
		
			
				|  |  |             map.put(el.getName(), DiGui(el));
 | 
	
		
			
				|  |  |         } catch (DocumentException e) {
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return map;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static void main(String[] args) {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String aa="<HisTrans>\n" +
 | 
	
		
			
				|  |  |                 "  <TranCode>GetHealthYE</TranCode>\n" +
 | 
	
		
			
				|  |  |                 "  <RespMsg />\n" +
 | 
	
		
			
				|  |  |                 "  <RespCode>0</RespCode>\n" +
 | 
	
		
			
				|  |  |                 "  <Order>\n" +
 | 
	
		
			
				|  |  |                 "    <HealthYE>3.94</HealthYE>\n" +
 | 
	
		
			
				|  |  |                 "    <HospitalizationYE />\n" +
 | 
	
		
			
				|  |  |                 "  </Order>\n" +
 | 
	
		
			
				|  |  |                 "</HisTrans>";
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | //        String aa= "<HisTrans>\n" +
 | 
	
		
			
				|  |  | //                "  <TranCode>GetHealthYE</TranCode>\n" +
 | 
	
		
			
				|  |  | //                "  <RespMsg />\n" +
 | 
	
		
			
				|  |  | //                "  <RespCode>0</RespCode>\n" +
 | 
	
		
			
				|  |  | //                "  <Order>\n" +
 | 
	
		
			
				|  |  | //                "    <HealthYE>3.94</HealthYE>\n" +
 | 
	
		
			
				|  |  | //                "    <HospitalizationYE></HospitalizationYE>\n" +
 | 
	
		
			
				|  |  | //                "  </Order>\n" +
 | 
	
		
			
				|  |  | //                "</HisTrans>";
 | 
	
		
			
				|  |  |         Map map = xmltoMap(aa);
 | 
	
		
			
				|  |  |         System.out.println(map);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static List xmltoList(String xml) {
 | 
	
		
			
				|  |  |         if (!StringUtils.isEmpty(xml)) {
 | 
	
		
			
				|  |  |             try {
 | 
	
		
			
				|  |  |                 List<Map> list = new ArrayList<Map>();
 | 
	
		
			
				|  |  |                 Document document = DocumentHelper.parseText(xml);
 | 
	
		
			
				|  |  |                 Element nodesElement = document.getRootElement();
 | 
	
		
			
				|  |  |                 List nodes = nodesElement.elements();
 | 
	
		
			
				|  |  |                 for (Iterator its = nodes.iterator(); its.hasNext(); ) {
 | 
	
		
			
				|  |  |                     Element nodeElement = (Element) its.next();
 | 
	
		
			
				|  |  |                     Map map = xmltoMap(nodeElement.asXML());
 | 
	
		
			
				|  |  |                     list.add(map);
 | 
	
		
			
				|  |  |                     map = null;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 nodes = null;
 | 
	
		
			
				|  |  |                 nodesElement = null;
 | 
	
		
			
				|  |  |                 document = null;
 | 
	
		
			
				|  |  |                 return list;
 | 
	
		
			
				|  |  |             } catch (Exception e) {
 | 
	
		
			
				|  |  |                 e.printStackTrace();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return null;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static Map DiGui(Element rootElement) {
 | 
	
		
			
				|  |  |         // 对节点进行判断
 | 
	
		
			
				|  |  |         int flag = hasGradeChrid(rootElement);
 | 
	
		
			
				|  |  |         // 存储本层的map,采用LinkedHashMap,保证的顺序
 | 
	
		
			
				|  |  |         Map<String, Object> map_this = new LinkedHashMap<String, Object>();
 | 
	
		
			
				|  |  |         // 存储子节点的map,采用LinkedHashMap,保证的顺序
 | 
	
		
			
				|  |  |         Map<String, Object> map_children = new LinkedHashMap<String, Object>();
 | 
	
		
			
				|  |  |         // 获取节点迭代器
 | 
	
		
			
				|  |  |         Iterator<Element> iterator = rootElement.elementIterator();
 | 
	
		
			
				|  |  |         if (flag == 0) {// 说明该节点所有子节点均有子节点,进入递归
 | 
	
		
			
				|  |  |             int num = 0;
 | 
	
		
			
				|  |  |             while (iterator.hasNext()) {// 依次继续对节点进行操作
 | 
	
		
			
				|  |  |                 Element childelement = iterator.next();
 | 
	
		
			
				|  |  |                 map_children = DiGui(childelement);
 | 
	
		
			
				|  |  |                 map_this.put(childelement.getName() + "_" + num, map_children);
 | 
	
		
			
				|  |  |                 num++;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (flag == 1) {// 说明该节点的所有子节点均无子节点,封装数据
 | 
	
		
			
				|  |  |             while (iterator.hasNext()) {
 | 
	
		
			
				|  |  |                 Element childelement = iterator.next();
 | 
	
		
			
				|  |  |                 map_this.put(childelement.getName(),
 | 
	
		
			
				|  |  |                         (String) childelement.getData());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (flag == 2) {// 说明了该节点的子节点有些拥有子节点,有些不拥有
 | 
	
		
			
				|  |  |             int nodes = rootElement.elements().size();// 获取子节点个数
 | 
	
		
			
				|  |  |             while (nodes >= 1) {
 | 
	
		
			
				|  |  |                 nodes--;
 | 
	
		
			
				|  |  |                 int num = 0;//为了让循环重复的节点,避免了key的冲突
 | 
	
		
			
				|  |  |                 Element element = iterator.next();
 | 
	
		
			
				|  |  |                 flag = hasGradeChrid(element);//对节点进行判断
 | 
	
		
			
				|  |  |                 if (flag == 1) {                          //对于子节点,如果只是普通的子节点,那么直接将数进行封装
 | 
	
		
			
				|  |  |                     // 封装如map,String,String
 | 
	
		
			
				|  |  |                     map_this.put(element.getName(), element.getData());
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 else{                                     //非普通子节点,那么进行递归
 | 
	
		
			
				|  |  |                     map_children = DiGui(element);
 | 
	
		
			
				|  |  |                     map_this.put(element.getName() + "_" + num, map_children);//为了让循环重复的节点,避免了key的冲突
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return map_this;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 用于判断该节点的类型 0:说明该节点所有子节点均有子节点 1:说明该节点的所有子节点均无子节点 2:说明了该节点的子节点有些拥有子节点,有些不拥有
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param rootelement
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public static int hasGradeChrid(Element rootelement) {
 | 
	
		
			
				|  |  |         int flag = 1;// 初始为1,用与处理对没有子节点的节点进行判断
 | 
	
		
			
				|  |  |         StringBuffer flag_arr = new StringBuffer();
 | 
	
		
			
				|  |  |         Iterator<Element> iterator = rootelement.elementIterator();
 | 
	
		
			
				|  |  |         while (iterator.hasNext()) {
 | 
	
		
			
				|  |  |             Element element = iterator.next();// 获取入参rootelement节点的子节点
 | 
	
		
			
				|  |  |             // Iterator<Element> iterator_chirld = element.elementIterator();
 | 
	
		
			
				|  |  |             if (element.elements().size() > 0) {// 判断是否有子节点
 | 
	
		
			
				|  |  |                 flag_arr.append("0");
 | 
	
		
			
				|  |  |             } else {
 | 
	
		
			
				|  |  |                 flag_arr.append("1");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         // 如果只包含0,说明该节点所有子节点均有子节点
 | 
	
		
			
				|  |  |         if (flag_arr.toString().contains("0")) {
 | 
	
		
			
				|  |  |             flag = 0;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         // 如果只包含1,说明该节点的所有子节点均无子节点
 | 
	
		
			
				|  |  |         if (flag_arr.toString().contains("1")) {
 | 
	
		
			
				|  |  |             flag = 1;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         // 如果同时包含了,0,1,说明了该节点的子节点有些拥有子节点,有些不拥有
 | 
	
		
			
				|  |  |         if (flag_arr.toString().contains("0")
 | 
	
		
			
				|  |  |                 && flag_arr.toString().contains("1")) {
 | 
	
		
			
				|  |  |             flag = 2;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return flag;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /* ============================== 以下暂时添加,后面可删除 ========================================= */
 | 
	
		
			
				|  |  | //    public static String maptoXml(Map map) {
 | 
	
		
			
				|  |  | //        Document document = DocumentHelper.createDocument();
 | 
	
		
			
				|  |  | //        Element nodeElement = document.addElement("node");
 | 
	
		
			
				|  |  | //        for (Object obj : map.keySet()) {
 | 
	
		
			
				|  |  | //            Element keyElement = nodeElement.addElement("key");
 | 
	
		
			
				|  |  | //            keyElement.addAttribute("label", String.valueOf(obj));
 | 
	
		
			
				|  |  | //            keyElement.setText(String.valueOf(map.get(obj)));
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //        return doc2String(document);
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    public static String listtoXml(List list) throws Exception {
 | 
	
		
			
				|  |  | //        Document document = DocumentHelper.createDocument();
 | 
	
		
			
				|  |  | //        Element nodesElement = document.addElement("nodes");
 | 
	
		
			
				|  |  | //        int i = 0;
 | 
	
		
			
				|  |  | //        for (Object o : list) {
 | 
	
		
			
				|  |  | //            Element nodeElement = nodesElement.addElement("node");
 | 
	
		
			
				|  |  | //            if (o instanceof Map) {
 | 
	
		
			
				|  |  | //                for (Object obj : ((Map) o).keySet()) {
 | 
	
		
			
				|  |  | //                    Element keyElement = nodeElement.addElement("key");
 | 
	
		
			
				|  |  | //                    keyElement.addAttribute("label", String.valueOf(obj));
 | 
	
		
			
				|  |  | //                    keyElement.setText(String.valueOf(((Map) o).get(obj)));
 | 
	
		
			
				|  |  | //                }
 | 
	
		
			
				|  |  | //            } else {
 | 
	
		
			
				|  |  | //                Element keyElement = nodeElement.addElement("key");
 | 
	
		
			
				|  |  | //                keyElement.addAttribute("label", String.valueOf(i));
 | 
	
		
			
				|  |  | //                keyElement.setText(String.valueOf(o));
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  | //            i++;
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //        return doc2String(document);
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    public static String doc2String(Document document) {
 | 
	
		
			
				|  |  | //        String s = "";
 | 
	
		
			
				|  |  | //        try {
 | 
	
		
			
				|  |  | //            // 使用输出流来进行转化
 | 
	
		
			
				|  |  | //            ByteArrayOutputStream out = new ByteArrayOutputStream();
 | 
	
		
			
				|  |  | //            // 使用UTF-8编码
 | 
	
		
			
				|  |  | //            OutputFormat format = new OutputFormat("   ", true, "UTF-8");
 | 
	
		
			
				|  |  | //            XMLWriter writer = new XMLWriter(out, format);
 | 
	
		
			
				|  |  | //            writer.write(document);
 | 
	
		
			
				|  |  | //            s = out.toString("UTF-8");
 | 
	
		
			
				|  |  | //        } catch (Exception ex) {
 | 
	
		
			
				|  |  | //            ex.printStackTrace();
 | 
	
		
			
				|  |  | //        }
 | 
	
		
			
				|  |  | //        return s;
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |