jdom操作xml实战

简介: jdom操作xml实战

jdom的官方git地址:

https://github.com/hunterhacker/jdom

基本用法

实战

写一个xml,并保存到指定的目录中,以xml文件的形式展示:

引入jar包

<dependency>
      <groupId>org.jdom</groupId>
      <artifactId>jdom</artifactId>
      <version>2.0.2</version>
</dependency>

工具类xmlutil:

import com.alibaba.fastjson.JSONObject;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class XMLUtils {
    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(XMLUtils.class);
    /**
     * 将文档写入本地的xml文件中
     * @param document
     * @param name
     * @return
     */
    public static boolean createXMLFile(Document document, String name) {
        try {
            File file = new File(name + ".xml");
            XMLOutputter xmlOutputter = new XMLOutputter();
            Format format = Format.getRawFormat();
            format.setIndent(" ");
            format.setTextMode(Format.TextMode.TRIM_FULL_WHITE);
           // document.setDocType( new DocType().setElementName(document.getRootElement()));
            xmlOutputter.setFormat(format);
            xmlOutputter.output(document, new FileOutputStream(file));
            return true;
        } catch (IOException e) {
            logger.error("创建XML出错", e);
            return false;
        }
    }
    /**
     *  将json对象,转成xml格式数据
     * @param jsonObject
     * @return
     */
    public static List jsonToXML(JSONObject jsonObject) {
        List list=new ArrayList<Element>();
        jsonObject.entrySet().forEach(i -> {
            Element element = new Element(i.getKey());
            element.setText(i.getValue().toString());
           list.add(element);
        });
        return  list;
    }
    /**
     * 将map转成xml格式数据
     * @param map
     * @return
     */
    public  static List mapToXMl(Map map){
        List list=new ArrayList<Element>();
        map.forEach((i,v) -> {
            Element element = new Element(i.toString());
            element.setText(v!=null?v.toString():"");
            list.add(element);
        });
        return  list;
   }
    /**
     * 将xml文件解析成document文档
     * @param path
     * @return
     */
    public static Document parseXMLFile(String path) {
        try {
            File file = new File(path+".xml");
            return  new SAXBuilder().build(file);
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("解析XML出错", e);
            return null;
        }
    }
    /**
     * 根据节点属性获取某个文档节点
     * @param element
     * @param id
     * @return
     */
    public static Element getElementById(Element element, String id) {
        Element child = null;
        for (Element item : element.getChildren()) {
            if (item.getAttributeValue("id").equals(id)) {
                child = item;
            }
        }
        return child;
    }
}

业务代码:

拷贝不能直接使用,有些是从数据库中读取的内容

public static void creatClothesXmlTest() {
        /* 创建xml相关的逻辑 */
        //创建xml根元素  1.判断文件是否存在,如果存在先删除了,然后创建根元素
//      String fileConfigPath = EdgemgmtConfig.getCameraConfigClothesUploadFile() + ".xml";
        String fileConfigPath = "D:/cameraConfigClothesUpload";
        Boolean isExists = FileUtils.isFileExists(fileConfigPath + ".xml");
        Document document = null;
        if (isExists) {
            FileUtils.deleteFile(fileConfigPath + ".xml");
        }
        document = new Document();
        document.setRootElement(new Element("cameraConfigClothesUpload"));
        Element rootEle = document.getRootElement();
        Element cameraElement = new Element("camera");
        cameraElement.setAttribute("id", 1 + "");
        Map map = new HashMap<String, Object>() {{
            put("cameraId", 1);
            put("cameraName", "摄像头1");
            put("videoStream", "rtsp://admin:jingke1533@192.168.2.4/Streaming/Channels/101?transportmode=unicast&profile=Profile_1");
            put("mark", "暂无备注");
        }};
        //摄像头基础信息转xml
        cameraElement.addContent(XMLUtils.mapToXMl(map));
        cameraElement.addContent(new Element("detectionAlgorithms"));
        Element detectionAlgorithms = cameraElement.getChild("detectionAlgorithms");
        SysCameraAlgorithm sysCameraAlgorithm = new SysCameraAlgorithm();
        sysCameraAlgorithm.setId(1L);
        sysCameraAlgorithm.setAlgorithmName("工服检测");
        sysCameraAlgorithm.setTrustValue(0.5D);
        //告警周期
        sysCameraAlgorithm.setWarningInterval(2);
        //检测周期
        sysCameraAlgorithm.setDiscernInterval(2);
        //运行状态
        sysCameraAlgorithm.setRunStatus(1);
        ZoneId zoneId = ZoneId.of("Asia/Shanghai");
        ZonedDateTime zonedDateTime = ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, zoneId);
        Date startDate = Date.from(zonedDateTime.toInstant());
        zonedDateTime = ZonedDateTime.of(1970, 1, 1, 23, 59, 59, 0, zoneId);
        Date endDate = Date.from(zonedDateTime.toInstant());
        sysCameraAlgorithm.setRunStartTime(startDate);
        sysCameraAlgorithm.setRunEndTime(endDate);
        sysCameraAlgorithm.setAlgorithmId(29L);
        SysCameraAlgorithmServiceImpl cameraAlgorithmService = new SysCameraAlgorithmServiceImpl();
        //创建算法xml 从数据库中查询获取到算法对象
        Element sysCameraAlgorithmConfigElement = cameraAlgorithmService.createConfigElement(sysCameraAlgorithm);
        //添加算法内容
        detectionAlgorithms.addContent(sysCameraAlgorithmConfigElement);
        //添加摄像头节点
        rootEle.addContent(cameraElement);
        //创建文件
        XMLUtils.createXMLFile(document, fileConfigPath);
    }
    public static void main(String[] args) {
       creatClothesXmlTest();
    }
查看效果:

D盘已经有了该文件:

具体内容:


大功告成!!!


相关文章
|
7月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
|
4月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
6月前
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
53 1
|
4月前
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
|
4月前
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
|
4月前
|
XML Java 数据库
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
这篇文章是Spring5框架的实战教程,详细介绍了事务的概念、ACID特性、事务操作的场景,并通过实际的银行转账示例,演示了Spring框架中声明式事务管理的实现,包括使用注解和XML配置两种方式,以及如何配置事务参数来控制事务的行为。
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
|
7月前
|
XML Java 数据库连接
Mybatis之简介、使用操作(安装、XML、SqlSession、映射的SQL语句、命名空间、作用域和生命周期)
【1月更文挑战第2天】 MyBatis 是一款优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。
179 2
Mybatis之简介、使用操作(安装、XML、SqlSession、映射的SQL语句、命名空间、作用域和生命周期)
|
7月前
|
XML 存储 JavaScript
深入学习 XML 解析器及 DOM 操作技术
所有主要的浏览器都内置了一个XML解析器,用于访问和操作XML XML 解析器 在访问XML文档之前,必须将其加载到XML DOM对象中 所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XML DOM对象
134 0
|
7月前
|
XML 数据格式
dom4j解析xml实战
dom4j解析xml实战
|
7月前
|
XML Java 数据库连接
* 完成单表操作:需要3个功能。 * 功能1:使用注解 * 功能2:通用Mapper * 功能3:使用xml
* 完成单表操作:需要3个功能。 * 功能1:使用注解 * 功能2:通用Mapper * 功能3:使用xml
121 0