java使用Document类解析xml并创建子标签节点

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: java使用Document类解析xml并创建子标签节点

1、导入Document 依赖

<dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.1</version>
        </dependency>

2、Document 基本方法使用

// xml字符串解析为Document对象
Document document = DocumentHelper.parseText(xmlStr);
// 读取xml文件并解析为Document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("./src/xxx.xml"));
// 获取文档根节点
Element root = document.getRootElement();
// 获取根节点下指定节点
Element contactElem = root.element("process");
// 获取子节点下面的指定节点
Element boyElem = contactElem.element("boy");
// 输出根标签的名字
System.out.println(root.getName());
// 获取根节点下面的所有子节点(不包过子节点的子节点)
List<Element> list = root.elements();
list.forEach(element -> {
     System.out.println(element.getName());
     // 获取子节点下面的所有子节点
     List<Element> chi = element.elements();
});
// 为节点添加子节点
Element addElement = boyElem.addElement("flowable:taskListener");
// 为子节点添加属性
addElement.addAttribute("event", "create");
addElement.addAttribute("event1", "create1");
// 将Document对象转换为xml字符串
document.asXML();

3、Document 使用实例

/**
     * 添加监听器
     *
     * @param xmlStr
     */
    private String addMonitor(String xmlStr) throws DocumentException {
        // 读取xml文件并解析为Document对象
//        SAXReader reader = new SAXReader();
//        Document document = reader.read(new File("./src/xxx.xml"));
        Document document = DocumentHelper.parseText(xmlStr); // xml字符串解析为Document对象
        // 获取文档根节点
        Element root = document.getRootElement();
        // 获得指定节点下面的子节点
        Element contactElem = root.element("process");// 获取根节点下的process子节点
        List<Element> contactList = contactElem.elements(); // 获取process子节点下的所有子节点
        contactList.forEach(e -> {
            System.out.println(e.getName());
            if ("userTask".equals(e.getName())) { // 找到等于userTask的节点下面的所有子节点
                List<Element> list1 = e.elements();
                list1.forEach(element -> {
                    if ("extensionElements".equals(element.getName())) { //得到想要的节点 并在之下添加子节点和属性
                        Element addElement = element.addElement("flowable:taskListener");
                        addElement.addAttribute("class", "com.mdx.it.bpm.flowable.handler.UserTaskListener");
                        addElement.addAttribute("event", "create");
                        addElement.addAttribute("id", "id-" + StringUtils.getRandomNumber(13));
                    }
                });
            }
            if ("endEvent".equals(e.getName())) { // 找到等于endEvent的节点
                AtomicBoolean flag = new AtomicBoolean(true);
                List<Element> list1 = e.elements();
                list1.forEach(element -> {
                    if ("extensionElements".equals(element.getName())) { //得到想要的节点 并在之下添加子节点和属性
                        Element addElement = element.addElement("flowable:executionListener");
                        addElement.addAttribute("class", "com.mdx.it.bpm.flowable.handler.ProcessEndListener");
                        addElement.addAttribute("event", "end");
                        flag.set(false);
                    }
                });
                // 可能不存在extensionElements节点的时候
                if (flag.get()) {
                    Element addElement = e.addElement("bpmn2:extensionElements");
                    Element endElement = addElement.addElement("flowable:executionListener");
                    endElement.addAttribute("class", "com.mdx.it.bpm.flowable.handler.ProcessEndListener");
                    endElement.addAttribute("event", "end");
                }
            }
        });
//        System.out.println(document.asXML());
        return document.asXML();
    }

文章持续更新,可以关注下方公众号或者微信搜一搜「 最后一支迷迭香 」第一时间阅读,获取更完整的链路资料。

相关文章
|
10天前
|
数据可视化 数据挖掘 BI
团队管理者必读:高效看板类协同软件的功能解析
在现代职场中,团队协作的效率直接影响项目成败。看板类协同软件通过可视化界面,帮助团队清晰规划任务、追踪进度,提高协作效率。本文介绍看板类软件的优势,并推荐五款优质工具:板栗看板、Trello、Monday.com、ClickUp 和 Asana,助力团队实现高效管理。
32 2
|
3天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
21小时前
|
Java 数据库连接 Spring
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
|
25天前
|
Java 编译器
Java 泛型详细解析
本文将带你详细解析 Java 泛型,了解泛型的原理、常见的使用方法以及泛型的局限性,让你对泛型有更深入的了解。
38 2
Java 泛型详细解析
|
24天前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
33 7
|
23天前
|
存储 算法 Java
Java内存管理深度解析####
本文深入探讨了Java虚拟机(JVM)中的内存分配与垃圾回收机制,揭示了其高效管理内存的奥秘。文章首先概述了JVM内存模型,随后详细阐述了堆、栈、方法区等关键区域的作用及管理策略。在垃圾回收部分,重点介绍了标记-清除、复制算法、标记-整理等多种回收算法的工作原理及其适用场景,并通过实际案例分析了不同GC策略对应用性能的影响。对于开发者而言,理解这些原理有助于编写出更加高效、稳定的Java应用程序。 ####
|
23天前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
25天前
|
Java 数据库连接 开发者
Java中的异常处理机制:深入解析与最佳实践####
本文旨在为Java开发者提供一份关于异常处理机制的全面指南,从基础概念到高级技巧,涵盖try-catch结构、自定义异常、异常链分析以及最佳实践策略。不同于传统的摘要概述,本文将以一个实际项目案例为线索,逐步揭示如何高效地管理运行时错误,提升代码的健壮性和可维护性。通过对比常见误区与优化方案,读者将获得编写更加健壮Java应用程序的实用知识。 --- ####
|
2月前
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
79 1
|
4月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)

推荐镜像

更多