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(); }
文章持续更新,可以关注下方公众号或者微信搜一搜「 最后一支迷迭香 」第一时间阅读,获取更完整的链路资料。