package cn.superdesk.uniorder.common.xml;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

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.HashMap;
import java.util.Map;


/**
 * @Description: WXUtils 特指 公众号 所以改名为 WechatMpUtils
 * @Author: linjinyu
 * @CreateDate: 2021/10/27 下午2:47
 * @UpdateUser: linjinyu
 * @UpdateDate: 2021/10/27 下午2:47
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
public class WechatMpUtils {

	public static Map<String, String> xmlToMap(String strXML) throws Exception {

		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) {

		}
		return data;
	}

	/**
	 * 将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;
	}
}
