• java dom4j 解析xml


    dom4j 解析xml

    本demo地址:https://github.com/woyaochengweidaniu/javaEE/tree/master/file-handling
    参考文档:https://www.cnblogs.com/hongwz/p/5514786.html

    添加依赖

    <dependency>
                <groupId>dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>1.6.1</version>
    </dependency>
    

    工具类

    package com.example.easyexcel.util;
    
    
    import cn.hutool.core.util.URLUtil;
    import org.apache.poi.util.StringUtil;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    import javax.xml.XMLConstants;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    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.*;
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class XmlUtil {
    
        /**
         * jdk 自带的工具
         * 将Map转换为XML格式的字符串
         *
         * @param data Map类型数据
         * @return XML格式的字符串
         * @throws Exception
         */
        public static String mapToXml(Map<String, String> data) throws Exception {
            org.w3c.dom.Document document = 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("
    |
    ", "");
            try {
                writer.close();
            } catch (Exception ex) {
            }
            return output;
        }
    
    
        /**
         * jdk 自带的工具
         * 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>();
                DocumentBuilder documentBuilder = 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) {
                XmlUtil.getLogger().warn("Invalid XML, can not convert to map. Error message: {}. XML content: {}", ex.getMessage(), strXML);
                throw ex;
            }
    
        }
    
    
        /**
         * dom4j 进行导出
         * @param maps
         * @param elementName
         */
        public static void exportXml(List<Map<String, Object>> maps, String elementName,HttpServletResponse response) {
            //我们需要英文换成换成驼峰形式
            org.dom4j.Document document = DocumentHelper.createDocument();
            org.dom4j.Element result = document.addElement("result");
            for (int i = 0; i < maps.size(); i++) {
                //添加序号节点
                //Element element = result.addElement(i + 1 + "");
                //添加对象节点
                Element data = result.addElement(elementName);
                Map<String, Object> map = maps.get(i);
                for (String k : map.keySet()) {
                    //将数据添加到对象节点之下
                    data.addElement(k).setText(map.get(k)+"");
                }
            }
            //FileWriter out = null;
            ServletOutputStream out = null;
            String fileName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHH")) + ".xml";
            try {
                out = response.getOutputStream();
                //out = new FileWriter(path + File.separator + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHH")) + ".xml");
                response.setContentType("multipart/form-data");
                response.setCharacterEncoding("utf-8");
                response.setHeader("Content-disposition", "attachment;filename="+ URLUtil.encode(fileName, StringUtil.UTF8));
                OutputFormat xmlFormat = new OutputFormat();
                xmlFormat.setEncoding("UTF-8");
                xmlFormat.setNewlines(true);
                // 生成缩进
                xmlFormat.setIndent(true);
                // 使用4个空格进行缩进, 可以兼容文本编辑器
                xmlFormat.setIndent("    ");
    
                XMLWriter writer = new XMLWriter(out, xmlFormat);
                writer.write(document);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
    
        }
    
    
        /**
         * 日志
         *
         * @return
         */
        public static Logger getLogger() {
            Logger logger = LoggerFactory.getLogger("wxpay java sdk");
            return logger;
        }
    
    
        public static DocumentBuilder newDocumentBuilder() throws ParserConfigurationException {
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            documentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
            documentBuilderFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
            documentBuilderFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
            documentBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
            documentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
            documentBuilderFactory.setXIncludeAware(false);
            documentBuilderFactory.setExpandEntityReferences(false);
    
            return documentBuilderFactory.newDocumentBuilder();
        }
    
        public static Document newDocument() throws ParserConfigurationException {
            return newDocumentBuilder().newDocument();
        }
    }
    
    
    

    web测试

    package com.example.easyexcel.xml;
    
    
    import com.example.easyexcel.util.XmlUtil;
    import com.example.easyexcel.work.service.IUserService;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletResponse;
    import java.util.List;
    import java.util.Map;
    
    /**
     * dom4j   导入导出  格式xml
     *
     * 参考文档1: https://www.cnblogs.com/hongwz/p/5514786.html
     */
    @RestController
    public class XmlController {
        @Autowired
        private IUserService userService;
    
    
        /**
         * xml 导出
         * @param response
         */
        @GetMapping("exportXml")
        public void exportXml(HttpServletResponse response) {
            List<Map<String, Object>> list = userService.listMaps();
            XmlUtil.exportXml(list, "user", response);
    
        }
    
    
        /**
         * xml导入
         * @param file
         * @throws Exception
         */
        @PostMapping("importXml")
        public void importXml(MultipartFile file) throws Exception {
    
            SAXReader saxReader = new SAXReader();
            Document document = saxReader.read(file.getInputStream());
            Element rootElement = document.getRootElement();
            System.out.println("根节点名字:" + rootElement.getName());
            List<Element> elements = rootElement.elements();
            elements.forEach(element -> {
                System.out.println(element.elementText("user_name"));
                System.out.println(element.elementText("age"));
                System.out.println(element.elementText("sex"));
                System.out.println(element.elementText("phone"));
                System.out.println(element.elementText("address"));
                System.out.println(element.elementText("birthday"));
                System.out.println(element.elementText("create_time"));
                System.out.println("#####################################");
    
            });
    
        }
    }
    
    
  • 相关阅读:
    Java并发编程:同步容器
    poj 1961 Period
    html与JacaScript中的重要思想:预留后路、向后兼容、js分离
    SQL从头開始
    android帧动画,移动位置,缩放,改变透明度等动画解说
    COCOS学习笔记--Cocod2dx内存管理(三)-Coco2d-x内存执行原理
    构建基于Javascript的移动CMS——生成博客(二).路由
    Oracle 单表选择率
    刚接触Joomla,写一下瞎折腾的初感受~
    Android学习笔记之ProgressBar案例分析
  • 原文地址:https://www.cnblogs.com/java-hardly-road/p/11158167.html
Copyright © 2020-2023  润新知