package cn.wisenergy.service.util; import com.itextpdf.text.DocumentException; import org.apache.poi.util.DocumentHelper; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.management.Attribute; import javax.swing.text.Document; import javax.swing.text.Element; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.StringWriter; import java.util.*; public class MapToXmlUtils { /** * map 对象转换成 xml 字符串 **//* public static String mapToXml(Map map) throws Exception{ if (null == map) return null; System.out.println("转换前的Map对象数据:" + map.toString()); StringBuffer sb = new StringBuffer(); *//** 添加xml 的公共头信息 *//* sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); mapToXmlHelp(map, sb); System.out.println("将map转成xml后的数据:" + sb.toString()); return sb.toString(); } *//** * 转换帮助方法 **//* private static void mapToXmlHelp(Map map, StringBuffer str) throws Exception{ Set set = map.keySet(); *//** 遍历key *//* for (Iterator it = set.iterator(); it.hasNext();) { String key = (String) it.next(); Object value = map.get(key); if (null == value) value = ""; *//** 如果对象是集合 *//* if (value.getClass().getName().equals("java.util.ArrayList")) { ArrayList list = (ArrayList) map.get(key); str.append("<" + key + ">"); for (int i = 0; i < list.size(); i++) { HashMap hm = (HashMap) list.get(i); mapToXmlHelp(hm, str); } str.append("</" + key + ">"); *//** 如果该集合对象的长度只有1,那么默认重复添加集合下节点 *//* if (null !=list && !list.isEmpty() && list.size() <= 1) { str.append("<" + key + ">"); for (int i = 0; i < list.size(); i++) { HashMap hm = (HashMap) list.get(i); mapToXmlHelp(hm, str); } str.append("</" + key + ">"); } *//** 对象非集合时 *//* } else { if (value instanceof HashMap) { str.append("<" + key + ">"); mapToXmlHelp((HashMap) value, str); str.append("</" + key + ">"); } else { str.append("<" + key + ">" + value + "</" + key + ">"); } } } }*/ /** * XML格式字符串转换为Map * * @param strXML XML字符串 * @return XML数据转换后的Map * @throws Exception */ public static Map<String, String> xmlToMap(String strXML) throws Exception { try { Map<String, String> data = new HashMap<String, String>(); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8")); org.w3c.dom.Document doc = documentBuilder.parse(stream); doc.getDocumentElement().normalize(); NodeList nodeList = doc.getDocumentElement().getChildNodes(); for (int idx = 0; idx < nodeList.getLength(); ++idx) { Node node = nodeList.item(idx); if (node.getNodeType() == Node.ELEMENT_NODE) { org.w3c.dom.Element element = (org.w3c.dom.Element) node; data.put(element.getNodeName(), element.getTextContent()); } } try { stream.close(); } catch (Exception ex) { // do nothing } return data; } catch (Exception ex) { throw ex; } } /** * 将Map转换为XML格式的字符串 * * @param data Map类型数据 * @return XML格式的字符串 * @throws Exception */ public static String mapToXml(Map<String, String> data) throws Exception { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder(); org.w3c.dom.Document document = documentBuilder.newDocument(); org.w3c.dom.Element root = document.createElement("xml"); document.appendChild(root); for (String key: data.keySet()) { String value = data.get(key); if (value == null) { value = ""; } value = value.trim(); org.w3c.dom.Element filed = document.createElement(key); filed.appendChild(document.createTextNode(value)); root.appendChild(filed); } TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); DOMSource source = new DOMSource(document); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); transformer.transform(source, result); String output = writer.getBuffer().toString(); //.replaceAll("\n|\r", ""); try { writer.close(); } catch (Exception ex) { } return output; } }